Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查询以获取每个类别中的项目计数(以显示包含0个项目的空项目)_Php_Mysql_Sql_Select_Count - Fatal编程技术网

Php 查询以获取每个类别中的项目计数(以显示包含0个项目的空项目)

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 但问题是,它只显示了包含新闻的类别!但是我想得到所有的分

我刚刚为表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
但问题是,它只显示了包含新闻的类别!但是我想得到所有的分类,即使是那些没有新闻的分类

我的新闻表是:

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