Comptabiliser tous les articles appartenant à une catégorie ET à ses sous-catégories
-
05-07-2019 - |
Question
J'apprécierais vraiment de l'aide avec mon problème:
J'ai 2 tables, catégories et articles MySQL, disposés comme suit:
catégories :
CATID - nom - parent_id
publications :
PID - nom - catégorie
Ce que je voudrais faire, c'est obtenir le nombre total de messages pour chaque catégorie, y compris les messages des sous-catégories.
À l'heure actuelle, je reçois le nombre total de messages dans chaque catégorie (niveau supérieur) (mais pas les sous-catégories) en faisant:
"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 question qui se pose à nouveau est la suivante: comment puis-je obtenir la somme totale de chaque catégorie, y compris celle de chaque sous-catégorie associée?
Il n'est pas possible de restructurer la base de données en un format d'ensemble imbriqué, car je gère un système existant.
Merci pour votre aide!
La solution
Si les catégories ne sont pas imbriquées indéfiniment, vous pouvez les JOINDRE un niveau à la fois. Voici un exemple pour jusqu'à 3 niveaux d'imbrication:
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
Autres conseils
Je pense que vous souhaitez examiner l'opérateur de cumul. Je pense que cela vous donnera ce que vous voulez.
http://msdn.microsoft.com/ en-us / library / ms189305 (SQL.90) .aspx
Randy