一列上有多个计数值

时间:2010-06-25 09:59:09

标签: php mysql

我想查询我的数据库并获取单个列中每个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个查询我的方式,我很乐意一个一个。

非常感谢任何帮助

此致

3 个答案:

答案 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