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!

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top