我有2个表名event
和checkin
它与event.id
和checkin.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
希望我的问题现在清楚了 谢谢
答案 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
另外,我建议您使用PDO
或mysqli_*
函数代替不推荐使用的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;