php - 一列上的多个计数值

标签 php mysql

我想查询我的数据库并获取单个列中每个 ID 的出现次数。

与此查询相关的两个表是: categories:这个表有一个所有类别的列表,带有标题

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 个查询,我很乐意一次完成。

任何帮助将不胜感激

问候

卢克

最佳答案

试试这个:

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

关于php - 一列上的多个计数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3117088/

相关文章:

php - 如何在 Bluemix 中部署 Zend Framework 2

php - WooCommerce:如何检查特定产品是否存在元 key

php - 使用 SimpleXML 解析 OAI PMH 文件

mysql - 导入错误的 MySQL 转储时如何跳过行

mysql - SQL - 无法弄清楚如何连接三个表

php - DateTime::modify() 的表达式以更改月份中的日期

php - 如何使用 php 将输入字段数组插入到 mysql 中

mysql - sql中多个相互关联的循环

mysql - 如何折叠这个嵌套的 MySQL 查询?

MySQL InnoDB : Difference Between `FOR UPDATE` and `LOCK IN SHARE MODE`