我正在使用Codeigniter和MySQL构建博客。我的问题是,我有一个包含帖子的表和一个包含类别的表。我还有一个带有post_categories的交叉引用表。我要做的是获取所有类别的名称和他们名下的帖子数量。
示例输出将是:Hello World(1)Test(0)等。
我很难找到的是一个SQL查询,它将连接三个表并让我得到计数,而且我也很难绕过如何进行查询。
这是我的表架构:
blgpost
====
id
*Other schema unimportant
blgpostcategories
=================
postid
categoryid
blgcategories
==========
id
name
*Other schema unimportant
答案 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
显示空类别(没有链接到帖子的帖子),而不是省略它们。