Autor Zpráva
Homeboy
Profil *
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 *
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 *
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 *
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 *
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 *
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 *
dobrá, otestuji, děkuji moc ;)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: