MySQL中如何选择所有类别并统计每个类别文章的数量
Posted
技术标签:
【中文标题】MySQL中如何选择所有类别并统计每个类别文章的数量【英文标题】:How to select all categories and count number of each category articles in MySQL 【发布时间】:2016-04-27 11:47:30 【问题描述】:分类表:
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 |
+-------+-------+
【问题讨论】:
提示:LEFT JOIN
。 GROUP BY
.
已经尝试过?寻找答案?嘿,这是 2 分钟的谷歌搜索....
【参考方案1】:
SELECT
c.`name`,
COUNT(a.cid) AS `count`
FROM
categories c
LEFT JOIN article a ON c.id = a.cid
GROUP BY
c.`name`
ORDER BY
c.`name`
【讨论】:
【参考方案2】:你也可以使用子查询
SELECT c.name,(select count(*) from article where cid = c.id) as count FROM cat c WHERE 1 GROUP BY c.id
【讨论】:
为什么 DV 这个答案?【参考方案3】:试试这个:
SELECT c.`name`, count(a.cid) as count FROM category
LEFT JOIN article
ON c.id = a.cid
GROUP BY a.cid
【讨论】:
【参考方案4】:select c.name,count(b.title)count from category a, article b where c.id = a.cid group by c.name order by a.cid;
【讨论】:
【参考方案5】:我希望这会奏效。请检查。
select
Category.name.
ifnull(count(Article.cid),0) as count
FROM
Category
LEFT JOIN
Article
on
Article.cid=Category.id
group by
Category.Id
【讨论】:
以上是关于MySQL中如何选择所有类别并统计每个类别文章的数量的主要内容,如果未能解决你的问题,请参考以下文章
选择每个类别的最后 3 条新闻 - 两个表 - (MySQL - PHP)