Lekérdezés két táblából, limit a másodikra
sziasztok!
adott két tábla, csoport (csoport_id, csoport_nev) és elem (elem_id, csoport_id, elem_nev).
szeretnék egy olyan lekérdezést írni, ami visszaadja a csoportokat és a hozzájuk tartozó elemek közül fix darabszámút, mondjuk hármat.
kerestem group by és limit szavakkal, de csak hasonló problémák felvetését találtam, megoldását nem.
végül kipróbáltam a mysql correlated subqueries-t is:de erre egy hibát dob, miszerint a mysql még nem támogatja a limit és in/all/any/some subquery kombinációt.
úgyhogy kéne nekem egy kerülő megoldás ha van ilyen.
mysql 5.0.26
u.i: a "lekérem a csoport_id-kat és php-vel összeillesztek sok limites lekérdezést unionnal" -nál szeretnék szebb megoldást ha létezik. :)
■ adott két tábla, csoport (csoport_id, csoport_nev) és elem (elem_id, csoport_id, elem_nev).
szeretnék egy olyan lekérdezést írni, ami visszaadja a csoportokat és a hozzájuk tartozó elemek közül fix darabszámút, mondjuk hármat.
kerestem group by és limit szavakkal, de csak hasonló problémák felvetését találtam, megoldását nem.
végül kipróbáltam a mysql correlated subqueries-t is:
SELECT
csoport_id, csoport_nev, elem_id, elem_nev
FROM
csoport c
LEFT JOIN elem e USING(csoport_id)
WHERE
elem_id = ANY (SELECT elem_id FROM elem WHERE csoport_id = c.csoport_id ORDER BY elem_nev LIMIT 3)
úgyhogy kéne nekem egy kerülő megoldás ha van ilyen.
mysql 5.0.26
u.i: a "lekérem a csoport_id-kat és php-vel összeillesztek sok limites lekérdezést unionnal" -nál szeretnék szebb megoldást ha létezik. :)
kategóriánként első 3 hír
Üdv,
Felhő
ejha
te sűrűn használsz ilyen lekérdezéseket? ha igen mennyire erőforrásigényesek?
ja és nagyon köszönöm a részletes példát!
konkrét eset
Hatékonyságról meg általában nem szerintem nehéz bármi okosat mondani, érdemes konkrét esetekben megnézni, hogy mit mutat az EXPLAIN, lemérni a válaszidőket, és aszerint dönteni. Amibe mostanában többször belefutottam: kollégák subquery-s megoldásait akár 10-szeresére sikerült gyorsítani JOIN-t használó formára való átírással.
Üdv,
Felhő
másik megoldás
Üdv,
Felhő
szép
az sql kérések hatákonyságát hogyan lehet mérni? pusztán logikailag (esetleg explain parancs segítségével) kikövetkeztethető melyik erőforrásigényesebb, vagy inkább ezt is rakjam egy nagy lépésszámú ciklusba és méricskéljem a futási időket, vagy ezek kombinációja?
nem éreztem még szükségét annak, hogy az sql parancsaim hatékonyságát mérjem, tehát nincs is tapasztalatom ilyesmiben.
teljesítmény mérés
Üdv,
Felhő
profile
köszi neked is az ötleteket!
ab
(Szerk.: Link...)
még nem próbáltam
változó, sorrend
először a változókkal akadt egy kis problémám, mert nem volt értékük, valahol meg kellett volna adni a kezdő értéket is, erre a doksi egy hozzászólásában (Mark Malakanov - 2006. április 30.) találtam megoldást. (persze ez lehet csak nekem volt újdonság, még nem használtam ilyen változókat.)
másodszor pedig a teszt adatokon tényleg működött a dolog, de az én adataimmal nem került bele mindig három elem a csoportba annak ellenére, hogy volt annyi. a where feltétel lehagyásával rájöttem, hogy ha nem rendezem a csoport szerint is az elemeket (ezt a teszt adatok felvitelénél te eleve megoldottad ;]), akkor nem egymás utáni rownum értékeket kapnak az azonos kategóriába tartozó elemek, így megdől a feltétel és torzul az eredmény.
teszt adatok (amikből nem kapok jó eredményt a lekérdezéseddel):
köszi, ha végigolvastad. :D
re
Üdv,
Felhő
konkrét példa
ezt nem tudom úgy megvalósítani, hogy lekérem a projectenkénti x db utoljára létrehozott még folyamatban lévő feladatot és utána nézem meg, hogy az adott user alá tartozik-e.
a változók nekem se phpmyadminban se parancssorban nem mentek inicializálás nélkül.
UNION
Üdv,
Felhő
ahol elkezdtem :]
sebaj, jó sokat tanultam így is! ;]
weblabor a konkrét példa