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!

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top