分类职位数

时间:2011-04-18 12:51:41

标签: php mysql sql codeigniter blogs

我正在使用Codeigniter和MySQL构建博客。我的问题是,我有一个包含帖子的表和一个包含类别的表。我还有一个带有post_categories的交叉引用表。我要做的是获取所有类别的名称和他们名下的帖子数量。

示例输出将是:Hello World(1)Test(0)等。

我很难找到的是一个SQL查询,它将连接三个表并让我得到计数​​,而且我也很难绕过如何进行查询。

这是我的表架构:

blgpost
====
id
*Other schema unimportant

blgpostcategories
=================
postid
categoryid

blgcategories
==========
id
name
*Other schema unimportant

3 个答案:

答案 0 :(得分:3)

这应该可以为您提供所需的输出....

SELECT c.name, COUNT(p.id) FROM
blgcategories c 
INNER JOIN blgpostcategories pc ON c.id = pc.categoryid
INNER JOIN blgpost p ON pc.postid = p.id
GROUP BY c.id

答案 1 :(得分:1)

您不需要加入这三个表 - blgpost表中没有您需要的任何信息。

SELECT COUNT(*), blgcategories.name 
FROM blgcategories INNER JOIN blgpostcategories 
ON blgcategories.id=blgpostcategories.categoryid 
GROUP BY blgcategories.id;

答案 2 :(得分:0)

SELECT  name, COUNT(pc.id)
FROM    blgcategories c
LEFT JOIN
        blgpostcategories pc
ON      pc.categoryid = c.id
GROUP BY
        c.id

使用LEFT JOIN会向0显示空类别(没有链接到帖子的帖子),而不是省略它们。