Contando tutti i post appartenenti a una categoria E alle sue sottocategorie
-
05-07-2019 - |
Domanda
Gradirei davvero un aiuto per il mio problema:
Ho 2 tabelle, categorie e post di MySQL, strutturati (semplificati) in questo modo:
categorie :
CATID - nome - parent_id
i messaggi :
PID - nome - categoria
Quello che vorrei fare è ottenere la quantità totale di post per ogni categoria, inclusi tutti i post nelle sottocategorie.
In questo momento sto ottenendo il numero totale di post in ciascuna categoria (di livello superiore) (ma non sottocategorie) facendo:
"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";
La domanda è ancora una volta, come posso ottenere i totali delle somme per ogni categoria, compresi i totali per ogni sottocategoria correlata?
La ristrutturazione del database in un formato set nidificato non è possibile, poiché sto mantenendo un sistema esistente.
Grazie per l'aiuto!
Soluzione
Se le categorie non sono nidificate all'infinito, puoi ISCRIVERSI un livello alla volta. Ecco un esempio per un massimo di 3 livelli di annidamento:
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
Altri suggerimenti
Penso che tu voglia guardare l'operatore Rollup. Credo che questo ti porterà quello che vuoi.
http://msdn.microsoft.com/ it-it / library / ms189305 (SQL.90) .aspx
Randy