获取每个记录mysql的计数

时间:2015-09-23 04:26:23

标签: mysql sql

我有2个表名eventcheckin 它与event.idcheckin.event_id合并 我想知道checkin

中所有记录的event中的签到次数

到目前为止,我已完成此操作并返回值,但它返回checkin表中

的条目的计数

我希望不会检查每个event.id

我如何得到它 我现在正在使用此查询

SELECT e.id,COUNT(*) from checkin c 
LEFT JOIN event e ON (c.event_id=e.id) 
GROUP by e.id

给我这样的结果

event_id    COUNT(*)
1             2
5             5
7             8

哪个好,但我想要这样的结果

event_id    COUNT(*)
1             2
2             0
3             0
4             0
5             5
6             0
7             8

希望我的问题现在清楚了 谢谢

3 个答案:

答案 0 :(得分:1)

将以下查询与计数器的别名

一起使用
SELECT e.id,COUNT(c.*) as check_count from checkin c 
LEFT JOIN event e ON (c.event_id=e.id) 
GROUP by e.id

另外,我建议您使用PDOmysqli_*函数代替不推荐使用的mysql_*函数

答案 1 :(得分:1)

反转连接并计算非null event_id:

SELECT e.d, COUNT(c.event_id) AS check_count
FROM event e LEFT OUTER JOIN checkin c ON c.event_id = e.id
GROUP BY e.event_id

尝试添加COUNT(e.id),以便将其与COUNT(*)COUNT(c.event_id)进行比较。

答案 2 :(得分:0)

你可以简单地做 -

select event_id, count(id) 
from checkin group by event_id;

如果由于某些特定原因你想要交叉检查事件表应该有相应的行,那么你可以按照以下方式进行 -

SELECT e.id, COUNT(c.id) 
FROM event AS e
JOIN checkin AS c ON c.event_id=e.id 
GROUP BY e.id;

如果您想要显示事件ID,即使在签入表中也不存在,那么您可以按照以下方式执行 -

SELECT e.id, COUNT(c.id) 
FROM event AS e
LEFT JOIN checkin AS c ON c.event_id=e.id 
GROUP BY e.id;