Php 查询以获取每个类别中的项目计数(以显示包含0个项目的空项目)
我刚刚为表NEWS和NEWS-CATEGORIES编写了这个查询,以便计算每个类别的项目:Php 查询以获取每个类别中的项目计数(以显示包含0个项目的空项目),php,mysql,sql,select,count,Php,Mysql,Sql,Select,Count,我刚刚为表NEWS和NEWS-CATEGORIES编写了这个查询,以便计算每个类别的项目: SELECT DISTINCT CAT.cid, CAT.c_title, N.n_category, count(*) AS cat_count FROM news N inner join news - categories CAT on CAT.cid = N.n_category GROUP BY N.n_category 但问题是,它只显示了包含新闻的类别!但是我想得到所有的分
SELECT DISTINCT CAT.cid, CAT.c_title, N.n_category, count(*) AS cat_count
FROM news N
inner join news - categories CAT
on CAT.cid = N.n_category
GROUP BY N.n_category
但问题是,它只显示了包含新闻的类别!但是我想得到所有的分类,即使是那些没有新闻的分类
我的新闻表是:
nid | n_category | etc
cid | c_title | etc
我的新闻分类表是:
nid | n_category | etc
cid | c_title | etc
谢谢你的帮助
关于试试这个:
SELECT
CAT.cid,
CAT.c_title,
count(N.n_category) AS cat_count
FROM `news-categories` CAT
LEFT JOIN `news` N
ON CAT.cid = N.n_category
GROUP BY CAT.cid,
CAT.c_title
使用左连接:
注意事项:1您必须在COUNT表达式中使用news中的列,而不是COUNT*,以便不计算空匹配项。2无需选择N.N_类别,因为它始终等于CAT.cid,并且您已经选择了它。3“按列分组”必须来自“新闻类别”表-您不能按表中可能没有任何匹配行的列分组,因为该值始终为空。我要指出的是,您也可以通过子查询进行分组:
SELECT CAT.cid, CAT.c_title,
(SELECT COUNT(*) FROM news N WHERE CAT.cid = N.n_category)
FROM `news - categories` CAT;
在某些情况下,这甚至可以有更好的性能。合并是不必要的。@GordonLinoff,区别在哪里?要删除合并,需要从第二个表中计算ID。没有匹配时,*将返回1。谢谢!这很好,@Barmar的回答是工作也很好,伙计,但我认为@Barmar建议的一个是与LEFT JOIN一起工作的bttr