Autor Zpráva
Aleš Tichava
Profil
Zdravím,

mám takový menší problém s výpisem článků na blogu. Vytvořil jsem si databázi s takovouto strukturou. Na blogu bych chtěl používat hierarchickou strukturu menu a tím i článků. Menu mám řešené traverzováním kolem stromu. No a s články mám problém. Zkoušel jsem to řešit taktéž traverzováním kolem stromu, ale to mám pak u každého článku i záznam s levou a pravou hodnotou prvku ve stromu. navíc se tyto hodnoty u článků i opakují. Získám tím stromovou strukturu, se kterou se pěkně pracuje, ale mám tak u článků duplicitní údaje a není to moc pěkný.

Tak jsem zkusil vytvořit třetí tabulku, abych dosáhl na relaci M:N. Článek může být ve více sekcích(hlavní sekce a podsekce) a jedna sekce může obsahovat více článků. V tabulce to vypadá následovně.

Problém však nastává při výběru článků. Tak nějak se nemůžu dopídit řešení, kdy si vyberu všechny články a ke každému článku budu mít sekci a počet komentářů. Věc na kterou nemůžu přijít je, že mi to stále vyhazuje trojnásobek komentářů, než ve skutečnostu u článku je. Dotaz s výsledkem.
Dotaz, ke kterému jsem se zatím dostal.
SELECT a.id, a.title, m.id AS menuid, ca.active, m.name AS category, 
COUNT(c.articles) AS comments 
FROM categories_articles ca
LEFT JOIN articles a ON (a.id = ca.article)
LEFT JOIN menu m ON (m.id = ca.category)
LEFT JOIN comments c ON (c.articles = a.id)
GROUP BY ca.article
ORDER BY ca.article DESC

Z tohoto dotazu dostanu vše, ale špatně mi to vrací kategorie a počet komentářů. Řekl bych že to má něco společného s tou agregační funkcí a GROUP BY. V dotazu sice sloučím ID článků, ale pak tu mám ještě kategorie( vždy 3). Tím, že to nějak nesloučím mi vždy vypadně právě trojnásobný počet komentářů.

Zde ještě přikládám SQL, pro případ, že by jste chtěli konkrétně zkusit vytvořit dotaz, aby jste nemuseli vytvářet tabulky s daty.
Tabulky ještě obsahují sloupce z experimentování, ty by ale neměli ničemu vadit.

Rád bych se také zeptal, jak řešíte vy takovýto případ, kdy tvoříte nějaký systém s hierarchickou strukturou článků?

Mnohokrát děkuji za jakékoliv nápady.
Kajman
Profil
Např.
COUNT(DISTINCT c.id)

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: