Plugin + baza danych
G[o]Q
23.07.2014
chodzilo mi o relacje w relacjach nr1 i 2 czyli jedno id jeden nick i jedno id jedna bron
GwynBleidD
23.07.2014
G[o]Q
23.07.2014
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
GwynBleidD
24.07.2014
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.
sebul
24.07.2014
GwynBleidD
24.07.2014
ON DUPLICATE KEY UPDATE przy takim insercie da się użyć... pytanie tylko czy na stacku ktoś podsunie rozwiązanie
sebul
24.07.2014
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ś tamjednak zajmuje sporo miejsca i jeszcze kwestia tego, czy duża ilość selectów, nie wpływa jakoś negatywnie.
G[o]Q
24.07.2014
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
sebul
24.07.2014
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.
sebul
24.07.2014
gracz (gid, nazwa) bron (bid, nazwa) posiada (gid, bid, unixtime) // dodałem jeszcze jedną kolumnę, która pomoże w opisaniu sytuacjii 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.
G[o]Q
24.07.2014
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
sebul
24.07.2014
G[o]Q
24.07.2014
kazda linijka to zestaw nastepnych danych a co sie dzieje przy duplikacji robisz po insercie (nie chcialo mi sie robic nawiasów)
GwynBleidD
24.07.2014
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.
sebul
24.07.2014
I w sumie tak właśnie to rozumiałem, ale goq coś nakręciłdoda DWA rekordy, po to jest ten OR Z połączonych tabel gracz i bron zostaną wyciągnięte 2 rekordy dzięki niemu.
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()
KlimaT 03.10.2016
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