计算属于某个类别及其子类别的所有帖子

时间:2009-11-26 14:16:25

标签: mysql sql count hierarchical-data

我真的很感激我的问题有一些帮助:

我有2个MySQL表,类别和帖子,如此布局(简化):

类别

CATID - name - parent_id

帖子

PID - 名称 - 类别

我想做的是获取每个类别的帖子总数,包括子类别中的所有帖子。

现在我通过以下方式获取每个(顶级)类别(但不是子类别)中的帖子总数:

"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"; 

问题再一次是,如何获得每个类别的总和,包括每个相关子类别的总计?

无法将数据库重组为嵌套集格式,因为我正在维护现有系统。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

如果类别没有无限嵌套,您可以一次加入一个级别。以下是最多3个嵌套级别的示例:

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

答案 1 :(得分:-2)

我想你想看看Rollup运算符。我相信这会让你得到你想要的东西。

http://msdn.microsoft.com/en-us/library/ms189305(SQL.90).aspx

兰迪