我想查询我的数据库并获取单个列中每个id的出现次数。
与此查询相关的两个表是: 类别:此表包含所有带标题的类别列表
id | title
----------
1 | project
2 | tech
3 | other
category_news:此表用于将新闻项目分配到类别,每个新闻项目可以分为多个类别
id | category_id | news_id
--------------------------
1 | 1 | 2
2 | 1 | 5
3 | 1 | 3
4 | 2 | 4
5 | 3 | 2
6 | 3 | 1
我想得到一个结果(不必是一个数组,我可以整理查询的结果,只需使用下面的数组作为返回结果的示例):
array(
'project' => 3
'tech' => 1
'other' => 2
);
其中键是类别标题,值是每个类别中新闻项的总数。我知道我可以通过查询每个类别来完成它:
select count(cn.category_id), c.title from category_news cn join categories c on c.id = cn.category_id where category_id = 1
但我的问题是,我可以用一个查询来完成所有计数吗?好像我有100个类别,100个查询我的方式,我很乐意一个一个。
非常感谢任何帮助
此致
路
答案 0 :(得分:1)
试试这个:
SELECT c.title, count(cn.category_id)
FROM categories c
LEFT JOIN categories_news cn
ON c.id = cn.category_id
GROUP BY c.title
答案 1 :(得分:1)
这将起作用(测试):
SELECT COUNT(cn.category_id), c.title
FROM category_news cn
JOIN categories c ON c.id = cn.category_id
GROUP BY cn.category_id
答案 2 :(得分:0)
是的,你可以。您必须使用如下(已测试)
之类的查询 SELECT count( * ) , c.title
FROM category_news cn
JOIN categories c ON c.id = cn.category_id
WHERE 1
GROUP BY cn.category_id