Autor | Zpráva | ||
---|---|---|---|
Homeboy Profil * |
#1 · Zasláno: 4. 10. 2009, 15:01:20
Ahoj, ze začátku popíšu tabulek které mám
1) clanek (id, nazev, text) 2) clanek_spoj (primID, sekID, type) primID - id clanku sekID - id podradného elemetu bud tagu nebo kategorie (určuje type) type - bud 'kategorie' nebo 'tag' 3) clanek_kategorie (id, nazev) 4) clanek_tagy (id, nazev) Chtěl bych vytáhnout z databáze všechny informace o článku, jeho název text + názvy kategorií a názvy tagů, které k němu přísluší. Zatím jsem se dostal k tomu, že vytáhnu tagy a všechny informace o článku, ale nevím jak to přesně udělat abych vytáhl i kategorie. Je to trochu složitější konstrukce SELECT clanek.id, GROUP_CONCAT(clanek_tag.nazev) AS tag FROM clanek LEFT JOIN clanek_spoj ON clanek.id = clanek_spoj.primID LEFT JOIN clanek_tag ON clanek_spoj.secID = clanek_tag.id WHERE clanek_spoj.type = "tag" GROUP BY clanek.id Jak k tomu ještě napojím aby to vytáhlo i ty kategorie? Napadl mě union jenže výsledky mám pak duplicitní .. |
||
Kajman_ Profil * |
#2 · Zasláno: 4. 10. 2009, 16:13:37
SELECT clanek.id, GROUP_CONCAT(clanek_tag.nazev) AS tag, , GROUP_CONCAT(clanek_kategorie.nazev) AS kategorie FROM clanek LEFT JOIN clanek_spoj cst ON clanek.id = cst.primID and cst.type = "tag" LEFT JOIN clanek_tag ON clanek_spoj.secID = clanek_tag.id LEFT JOIN clanek_spoj csk ON clanek.id = csk.primID and cst.type = "kategorie" LEFT JOIN clanek_kategorie ON clanek_spoj.secID = clanek_kategorie.id GROUP BY clanek.id |
||
Homeboy Profil * |
#3 · Zasláno: 4. 10. 2009, 16:41:09
Dobře, díky to by fungovalo, ale problém nastává tehty, kdy je tagů více než kategorií .. třeba když jsou tagy: novinky, technika, škola
Tak se kategorie, která je jen jedna vypíše třikrát: obecně, obecně, obecně ... jak tomuhle zabráním díky moc |
||
Kajman_ Profil * |
#4 · Zasláno: 6. 10. 2009, 08:13:22
Buď group_concat(distinct ... nebo si zgrupovat jen tagy a jen kategorie každé zvlášť a oboje připojit už jen jako ten seznam.
|
||
Homeboy Profil * |
#5 · Zasláno: 6. 10. 2009, 17:21:45
Kromě toho, že to druhé řešení uplně nechápu, by mě ještě zajímalo jakým způsobem je vhodnější dosáhnout požadovaného výsledku?
|
||
Kajman_ Profil * |
#6 · Zasláno: 6. 10. 2009, 19:23:38
Pokud to potřebuje vypsat např. pro 5 článků z tisíce, tak může být rychlejší použití korelovaných poddotazů, pokud všechny články tak to druhé řešení a někdy může být rychlejší to s distinct. Obecná odpověď není, musíte si to změřit v konkrétním použití a předpokládaným poměrem zobrazených a uložených dat.
|
||
Homeboy Profil * |
#7 · Zasláno: 6. 10. 2009, 20:12:23
dobrá, otestuji, děkuji moc ;)
|
||
Časová prodleva: 15 let
|
0