Php 如何选择MySQL中的所有类别并统计每个类别的文章数

Php 如何选择MySQL中的所有类别并统计每个类别的文章数,php,mysql,categories,Php,Mysql,Categories,类别表: id, name --------- 1 cat1 2 cat2 3 cat3 4 cat4 条款表: id, cid, title -------------- 1 1 title1 2 3 title2 3 1 title3 4 2 title4 如何选择MySQL中的所有类别并统计每个类别的文章数?我需要一个mysql查询,它将选择所有类别和属于每个类别的文章总数,并按类别id排序 预期产出表: +-------

类别表:

id, name
---------
1   cat1
2   cat2
3   cat3 
4   cat4
条款表:

id, cid, title
--------------
1   1    title1
2   3    title2
3   1    title3
4   2    title4   
如何选择MySQL中的所有类别并统计每个类别的文章数?我需要一个mysql查询,它将选择所有类别和属于每个类别的文章总数,并按类别id排序

预期产出表:

+-------+-------+    
|  name | count |    
+-------+-------+    
|  cat1 |     2 |    
|  cat2 |     1 |    
|  cat3 |     1 |  
|  cat4 |     0 |  
+-------+-------+

试试这个:

SELECT c.`name`, count(a.cid) as count FROM category
LEFT JOIN article
ON c.id = a.cid
GROUP BY a.cid

我希望这能奏效。请查收

select
    Category.name.
    ifnull(count(Article.cid),0) as count
FROM
    Category
LEFT JOIN
    Article 
on
    Article.cid=Category.id
group by
    Category.Id 

您还可以使用子查询,如

SELECT c.name,(select count(*) from article where cid = c.id) as count  FROM cat c WHERE 1 GROUP BY c.id 

提示:
左连接
<代码>分组依据。是否已尝试某项操作?寻找答案?嘿,用谷歌搜索2分钟……为什么要用DV搜索这个答案?
select
    Category.name.
    ifnull(count(Article.cid),0) as count
FROM
    Category
LEFT JOIN
    Article 
on
    Article.cid=Category.id
group by
    Category.Id 
SELECT c.name,(select count(*) from article where cid = c.id) as count  FROM cat c WHERE 1 GROUP BY c.id