Zählen Sie alle Beiträge zu einer Kategorie gehören, und ihre Unterkategorien
-
05-07-2019 - |
Frage
Ich würde wirklich etwas Hilfe mit meinem Problem zu schätzen wissen:
Ich habe 2 MySQL-Tabellen, Kategorien und Beiträge, angelegt (vereinfacht) wie folgt:
Kategorien :
CATID - Name - parent_id
Beiträge :
PID - Name - Kategorie
Was würde Ich mag es, den Gesamtbetrag der Beiträge für jede Kategorie tun bekommen, alle Beiträge in Unterkategorien.
Im Moment ist ich die Gesamtzahl der Stellen in jedem (Top-Level) Kategorie bekommen (aber nicht Unterkategorien), indem Sie:
"SELECT c.*, COUNT(p.PID) as postCount
FROM categories AS c LEFT JOIN posts AS p
ON (c.CATID = p.category)
WHERE c.parent='0' GROUP BY c.CATID ORDER BY c.name ASC";
Die Frage ist wieder einmal, wie kann ich die Summe für jede Kategorie erhalten beläuft sich die Summen für jede bezogenen Unterkategorie einschließlich?
zu einem verschachtelten Satz Format der Datenbank Restrukturierung ist nicht möglich, da ich ein vorhandenes System am beibehalten wird.
Vielen Dank für Ihre Hilfe!
Lösung
Wenn die Kategorien nicht unendlich verschachtelt sind, können Sie sich ihnen eine Ebene zu einer Zeit. Hier ist ein Beispiel für bis zu 3 Ebenen der Verschachtelung:
SELECT c.name, COUNT(DISTINCT p.PID) as postCount
FROM categories AS c
LEFT JOIN categories AS c2
ON c2.parent = c.catid
LEFT JOIN categories AS c3
ON c3.parent = c2.catid
LEFT JOIN posts AS p
ON c.CATID = p.category
OR c2.CATID = p.category
OR c3.CATID = p.category
WHERE c.parent = '0'
GROUP BY c.CATID, c.name
ORDER BY c.name ASC
Andere Tipps
Ich glaube, Sie am Rollup Betreiber suchen. Ich glaube, das wird Sie bekommen, was Sie wollen.
http://msdn.microsoft.com/ en-us / library / ms189305 (SQL.90) aspx
Randy