Szerző Téma: MYSQL több lekérdezés egy query-ben  (Megtekintve 4503 alkalommal)

MYSQL több lekérdezés egy query-ben
« Dátum: 2012. július 18. - 10:13:31 »
+2 Show voters
Ü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)
« Utoljára szerkesztve: 2012. július 18. - 11:58:06 írta hegdavid95 »

Nem elérhető tonyo

  • 1335
  • Moderális Generátor
    • Profil megtekintése
MYSQL több lekérdezés egy query-ben
« Válasz #1 Dátum: 2012. július 18. - 11:30:48 »
+2 Show voters
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 :)

MYSQL több lekérdezés egy query-ben
« Válasz #2 Dátum: 2012. július 18. - 11:56:24 »
0 Show voters
hmm köszönöm a hasznos tanácsot Anthony :D

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
MYSQL több lekérdezés egy query-ben
« Válasz #3 Dátum: 2012. július 19. - 18:22:17 »
0 Show voters
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
« Utoljára szerkesztve: 2012. július 19. - 23:01:48 írta kurta999 »

Nem elérhető tonyo

  • 1335
  • Moderális Generátor
    • Profil megtekintése
MYSQL több lekérdezés egy query-ben
« Válasz #4 Dátum: 2012. július 19. - 18:24:33 »
0 Show voters
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.
« Utoljára szerkesztve: 2012. július 19. - 18:26:22 írta Anthony »

Nem elérhető Spedy

  • 227
    • Profil megtekintése
MYSQL több lekérdezés egy query-ben
« Válasz #5 Dátum: 2012. július 22. - 14:49:53 »
0 Show voters
Jó lett!

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal