我正在为两个表格进行SELECT
查询。
表:
选择QUERY:
SELECT MONTH(`ec_calendar`.`Day`) AS Month ,COUNT(`ID_Event`) AS Count
FROM `ec_events`,`ec_calendar`
WHERE `ec_events`.`FK_Day`=`ec_calendar`.`ID_Day` AND YEAR(`ec_calendar`.`Day`) = 2015
GROUP BY MONTH(`ec_calendar`.`Day`)
结果:
这里唯一的问题是5月(5个月)。在结果图像中,您可以看到,被忽略,因为在ec_calendar
中本月没有条目。很多时候会更好,如果0可以返回。所以表格会如此:
....
3 15
4 7
5 0
6 10
7 3
...
有没有办法提供它?
答案 0 :(得分:4)
使用LEFT JOIN
:
SELECT MONTH(`ec_calendar`.`Day`) AS Month ,COUNT(`ID_Event`) AS Count
FROM `ec_events`
LEFT JOIN `ec_calendar`
ON `ec_events`.`FK_Day`=`ec_calendar`.`ID_Day`
WHERE YEAR(`ec_calendar`.`Day`) = 2015
GROUP BY MONTH(`ec_calendar`.`Day`)
LEFT JOIN
将保留左表中的所有记录,并填写与您的右表不匹配的NULL
。
答案 1 :(得分:1)
您必须创建一个表格allMonth
,其中所有月份都是1..12,如果需要,您也可以添加年份字段。
此 sample 会让您了解如何在表格中填写日期范围
<强>整个月强>
month_id
year_id
name
查询
SELECT AM.month_id AS Month, COUNT(`ID_Event`) AS Count
FROM allMonth AM
LEFT JOIN `ec_calendar` EC
ON AM.month_id = MONTH(EC.`Day`)
INNER JOIN `ec_events` EV
ON EV.`FK_Day`= EC.`ID_Day`
AND YEAR(EC.`Day`) = 2015
GROUP BY AM.month_id
有条件的提示: