GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Leírások/Útmutatók => A témát indította: hegdavid95 - 2012. Július 18. - 10:13:31

Cím: MYSQL több lekérdezés egy query-ben
Írta: hegdavid95 - 2012. Július 18. - 10:13:31
Üdv!
Kutattam kicsit a mysql rejtelmei között és találtam egy igen hasznos lehetõséget.
Ha valamien oknál fogva nekünk két táblából kellene kinyernünk adatokat és nem egybõl, viszont nem akarjuk hogy két külön lekérdezés legyen, mert ugye akkor külön callback kell. Meg lehet oldani úgy is, hogy egy queryben legyen. igazából csak annyi, hogy a két külön lekérdezés query-jét egymás mögé tesszük, és közé rakjuk az UNION szót.
A visszatérésnél pedig az elsõ sor az elsõ lekérdezés a második sor a második lekrédezés
pl:
 
//a lekérdezés
mysql_function_query(1, query, true, \"THREAD_pelda\", \"SELECT `Adat1` FROM `Tabla1` WHERE `valami` = \'1\' UNION SELECT `Adat2` FROM `Tabla2` WHERE `valami` = \'2\'\");
//a visszatérés
forward THREAD_pelda();
public THREAD_pelda()
{
new string[128];
cache_get_row(0,0,string);
printf(\"Adat1: %s\",string);
cache_get_row(1,0,string);
printf(\"Adat2: %s\",string);
}

 
Ennek a dolognaka  hátulütõje annyi, hogy a két táblának azonos adat struktúrával kell rendelkeznie.
Helyesbítek: Azonos cella számúnak kell lennie a két sornak (köszönet Anthonynak)
Cím: MYSQL több lekérdezés egy query-ben
Írta: tonyo - 2012. Július 18. - 11:30:48
Miért kellene azonos struktúrával rendelkezni? Két teljesen különbözõ táblából is le lehet kérni az adatokat, egy dolognak kell megegyeznie, a táblánként lekért mezõk számának. Ha az egyik táblából 2 mezõt kérsz le, akkor a másikból is 2-t kell lekérned, különben errort kapsz. Erre létezik egy csalás, méghozzá az, ha 2x kéred le ugyanazt a mezõt. Pl.:
 
SELECT `Adat1`, `Adat2` FROM `Tabla1` WHERE `valami` = \'1\' UNION SELECT `Adat3`,`Adat3` FROM `Tabla2` WHERE `valami` = \'2\'

 
Ez a kód tökéletesen mûködik.
Egyébként tapasztalatom szerint 2 eltérõ táblából teljesen eltérõ sorra ritkán van szükség, ha pedig ugyanazt a \"sort\" akarjuk lekérni(pl. Kis_Mariskához tartozó sort mind a 2 táblából, de mi név alapján akarjuk azonosítani, viszont a 2. táblában csak id alapján van kötve a dolog az elsõ táblához), akkor meg kapcsolhatjuk a 2 táblát(JOIN), és sokkal egyszerûbb és szebb megoldás :)
Cím: MYSQL több lekérdezés egy query-ben
Írta: hegdavid95 - 2012. Július 18. - 11:56:24
hmm köszönöm a hasznos tanácsot Anthony :D
Cím: MYSQL több lekérdezés egy query-ben
Írta: kurta999 - 2012. Július 19. - 18:22:17
Kösz, hogy felhoztátok ezt az UNION megoldást.
A join-ról már tudtam régen, azt használtam is :D.
Bár a LEFT JOIN az többet ér helyenként, mivel az a NULL értékeket is kiírja neked.
E: Amúgy UNION-nál nemkell ugyanazt lekérni 2x, írsz neki egy NULL-t és megvan oldva :D
Cím: MYSQL több lekérdezés egy query-ben
Írta: tonyo - 2012. Július 19. - 18:24:33
Attól függ, mert ha neked csak azok a sorok kellenek ahol van kapcsolat, akkor jobb az INNER :)


Egyébként furcsa, de az UNION az ami a \"legveszélyesebb\". SQL Injectionkor is legtöbbször azt használjuk.
Cím: MYSQL több lekérdezés egy query-ben
Írta: Spedy - 2012. Július 22. - 14:49:53
Jó lett!