Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Plugin + baza danychOpis dobrego projektu bazy i dobrego używania jej w pluginie.


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
37 odpowiedzi w tym temacie

#21 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 23.07.2014 22:50

chodzilo mi o relacje w relacjach nr1 i 2 czyli jedno id jeden nick i jedno id jedna bron :P


  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#22 GwynBleidD

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 23.07.2014 23:13

To w takim razie jeszcze raz wyjaśnij o co Ci chodziło... nie rozumiem czemu się pytasz po co kilka rekordów?
  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#23 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 23.07.2014 23:15


jak dodać kilka nowych rekordów do jednej z tabel

 

tego nie zrozumialem myslalem że chce dodać kilka rekordów w jednym zapytaniu mając dane pogrupowane w relacjach w których kolumny są w relacji 1:1


  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#24 GwynBleidD

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 24.07.2014 09:02

Ahh... no da się tym sposobem wrzucić kilka różnych rekordów w prosty sposób:

INSERT INTO posiada (gid,bid)
SELECT g.gid, b.bid FROM gracz AS g INNER JOIN bron AS b ON 1=1 WHERE (g.nazwa='%s' AND b.nazwa='%s') OR (g.nazwa='%s' AND b.nazwa='%s');
Nie ma chyba potrzeby tłumaczyć, jak to zadziała :)

Co ciekawe, wcześniejszym sposobem z zagnieżdżonymi selectami się nie da, bo nie mamy możliwości "powiedzenia" SQLowi które rekordy mają ze sobą iść w parze...

Problem jednak pojawia się, gdy chcemy wstrzyknąć własne dane do tego... Ale rzuciłem na stacku pytanie o to, więc być może za chwilę będzie na to sposób ;)

http://stackoverflow...om-other-tables

Ogólnie polecam stackoverflow przy tego typu problemach.
  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#25 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 24.07.2014 11:53

No mi właśnie chodziło o to, jak dodać kilka rekordów, a pisząc kilka, miałem na myśli tyle ile w łatwy sposób można dodać za pomocą zwykłego inserta oraz w taki sposób, aby wykorzystać "on duplicate key update" dla powtarzających się kluczy. Te przykładowe zapytanie było tylko po to, aby pokazać o co mniej więcej mi chodziło, tylko jeden rekord nie jest trudno dodać (są różne sposoby), problem zaczyna się w momencie, gdy chce się dodać, np. 100 rekordów za jednym razem.
sebul (24.07.2014 12:35):
Tak sobie teraz pomyślałem i przecież można by do tego wykorzystać funkcję sql, tylko czy aby na pewno na każdym hostingu jest dostęp do tworzenia własnych funkcji.

  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#26 GwynBleidD

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 24.07.2014 13:40

Funkcje nie zawsze są niestety dostępne. Poza tym jeśli coś się da zrobić funkcją, da się też bez...

ON DUPLICATE KEY UPDATE przy takim insercie da się użyć... pytanie tylko czy na stacku ktoś podsunie rozwiązanie ;)
  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#27 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 24.07.2014 13:47

No miałem już pisać, że jednak te funkcje nie zawsze są dostępne, no i można też bez funkcji robić, tylko wtedy zapytanie było by bardzo długie, bo coś takiego
INSERT INTO posiada (gid,bid)
VALUES ((SELECT g.gid FROM gracz AS g WHERE g.nazwa='%s'),(SELECT b.bid FROM bron AS b WHERE b.nazwa='%s')),
((SELECT g.gid FROM gracz AS g WHERE g.nazwa='%s'),(SELECT b.bid FROM bron AS b WHERE b.nazwa='%s')) // i tak dalej
ON DUPLICATE KEY UPDATE // coś tam
jednak zajmuje sporo miejsca i jeszcze kwestia tego, czy duża ilość selectów, nie wpływa jakoś negatywnie.
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#28 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 24.07.2014 14:12

a jak wprowadzasz dane do tego kodu? pokaż w jaki sposób chcesz tego użyć no chyba ze masz tablice z parami stringów i chodzi o to zeby dla kazdego elementu tablicy wykonac zapytanie wyżej podane i chcesz to zrobic w jednym zapytaniu? podaj jakies dane wejsciowe przyklad uzycia i rezultat


  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#29 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 24.07.2014 14:37

Tabele, które podałem w tym temacie, są "z d*py", podałem je po to, aby pokazać o co chodzi, a że w tym temacie są poruszone dwie kwestie:
1. Można łatwo aktualizować x rekordów w bazie poprzez insert i duplicate key.
2. Nie dodajemy nowego pustego rekordu po tym, jak jakichś danych (np. gracza) nie ma w bazie.
To też zacząłem dyskusję na temat, jak to zrobić w przypadku kluczy obcych i nie mając id tych kluczy obcych. Bo skoro po zapytaniu select nie dostaniemy rekordu (także id), to też potem skąd niby wziąć id dla nowego rekordu do tabeli, gdzie te id jest potrzebne jako klucz obcy. W pewnym sensie, te zapytanie, które podałem we wcześniejszym poście, rozwiązywało by problem, ale teraz czy aby na pewno większa liczba selectów nie wpłynie negatywnie na działanie, no i czy nie da się tego zrobić jednak jakoś krócej.
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#30 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 24.07.2014 14:58

da sie laczysz tabele wybierasz co chcesz i pakujesz do inserta


  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#31 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 24.07.2014 15:14

Czy aby na pewno? Tak dla przypomnienia, mamy takie tabele
gracz (gid, nazwa)
bron (bid, nazwa)
posiada (gid, bid, unixtime) // dodałem jeszcze jedną kolumnę, która pomoże w opisaniu sytuacji
i powiedzmy, że mamy 1000 graczy oraz 100 broni i chcemy dla 30 graczy dodać po 10 broni, ale nie posiadamy id tych 30 graczy oraz nie posiadamy id tych 10 broni, mamy tylko same nazwy, dodatkowo chcemy jakoś złapać duplikację kluczy i w momencie duplikacji aktualizować czas. I jak to zrobić krócej? Na tym kodzie co podałem, wyglądało by to mniej więcej tak
INSERT INTO posiada (gid,bid,unixtime) VALUES
((SELECT g.gid FROM gracz AS g WHERE g.nazwa='%s'),(SELECT b.bid FROM bron AS b WHERE b.nazwa='%s'),UNIX_TIMESTAMP()),
((SELECT g.gid FROM gracz AS g WHERE g.nazwa='%s'),(SELECT b.bid FROM bron AS b WHERE b.nazwa='%s'),UNIX_TIMESTAMP()) // i tak dalej
ON DUPLICATE KEY UPDATE unixtime=UNIX_TIMESTAMP()
ale to będzie sporo znaków, bo tych nowych rekordów będzie 300.
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#32 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 24.07.2014 16:52

Wykorzystujac kod Gwyna

INSERT INTO posiada (gid,bid) VALUES 
SELECT g.gid, b.bid FROM gracz AS g INNER JOIN bron AS b ON 1=1 WHERE (g.nazwa='%s' AND b.nazwa='%s') OR (g.nazwa='%s' AND b.nazwa='%s'),
SELECT g.gid, b.bid FROM gracz AS g INNER JOIN bron AS b ON 1=1 WHERE (g.nazwa='%s' AND b.nazwa='%s') OR (g.nazwa='%s' AND b.nazwa='%s'),

+ timestamp jedne select mniej

 

 


  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#33 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 24.07.2014 16:58

Nie kumam tego zapytania, dwa selecty do jednego inserta? I po co ten OR? Dodatkowo "+ timestamp jedne select mniej" czyli? A jakbym dodał jeszcze jedną kolumnę, którą chciałbym też aktualizować w przypadku duplikacji?
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#34 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 24.07.2014 17:27

kazda linijka to zestaw nastepnych danych a co sie dzieje przy duplikacji robisz po insercie (nie chcialo mi sie robic nawiasów)


  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#35 GwynBleidD

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 24.07.2014 18:12

Nie nie nie :)

INSERT INTO posiada (gid,bid) VALUES 
SELECT g.gid, b.bid FROM gracz AS g INNER JOIN bron AS b ON 1=1 WHERE (g.nazwa='%s' AND b.nazwa='%s') OR (g.nazwa='%s' AND b.nazwa='%s');
doda DWA rekordy, po to jest ten OR :) Z połączonych tabel gracz i bron zostaną wyciągnięte 2 rekordy dzięki niemu.
  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#36 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 24.07.2014 18:26

doda DWA rekordy, po to jest ten OR smile.png Z połączonych tabel gracz i bron zostaną wyciągnięte 2 rekordy dzięki niemu.

I w sumie tak właśnie to rozumiałem, ale goq coś nakręcił :D
A żeby było z duplicate key, to rozumiem, że
INSERT INTO posiada (gid,bid,unixtime) VALUES
SELECT g.gid, b.bid, UNIX_TIMESTAMP() FROM gracz AS g INNER JOIN bron AS b ON 1=1 WHERE
(g.nazwa='%s' AND b.nazwa='%s') OR
(g.nazwa='%s' AND b.nazwa='%s')
ON DUPLICATE KEY UPDATE unixtime=UNIX_TIMESTAMP()

  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#37 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 24.07.2014 22:39

nie zwrocilem uwagi na WHERE i nie zauwazylem OR moj błąd


  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#38 KlimaT

    Początkujący

  • Zbanowany

Reputacja: 0
Nowy

  • Postów:18
  • Imię:Filip
  • Lokalizacja:stróża
Offline

Napisano 03.10.2016 22:03

No, czy mógłbyś mi wytłumaczyć dlaczego mi duplikuje nicki w top 15?????? Maskara... Nie mam pojęcia dlaczego tak jest,, Każdemu na moim serwie się tak dzieje 

Załączone miniatury

  • ad asdadas.png





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych