我已经尝试解决这个问题有一段时间了,但找不到解决方案:我正在查询时间条目,结果如下:
2015-02-10: 13
2015-02-11: 16
2015-02-13: 11
正如您所看到的,我在数组中缺少了两天,因为这些天没有条目。我的 google-fu 为我带来了这个问题的一些解决方案,但似乎没有一个适用于我的特定代码:
SELECT
DATE(time_entries.start) AS date,
COUNT(time_entries.id) AS entries,
SUM(CASE WHEN user_id = 4 THEN TIMESTAMPDIFF(MINUTE, start, end) ELSE 0 END) AS me,
SUM(CASE WHEN user_id = 3 THEN TIMESTAMPDIFF(MINUTE, start, end) ELSE 0 END) AS ph
FROM time_entries
LEFT JOIN calendar_table
ON time_entries.start=calendar_table.dt
WHERE start BETWEEN CURRENT_DATE - INTERVAL 1 MONTH AND CURDATE()
GROUP BY date
ORDER BY date
我在以下帮助下创建了calendar_table:https://www.brianshowalter.com/calendar_tables
请帮忙! 最好的, 克里斯
最佳答案
尝试使用右连接。您的查询正在使用 time_entries 记录来匹配日历表,但什么也没找到,因为它们不存在。
通过使用右连接,您将首先使用calendar_table记录。
SELECT
DATE(time_entries.start) AS date,
COUNT(time_entries.id) AS entries,
SUM(CASE WHEN user_id = 4 THEN TIMESTAMPDIFF(MINUTE, start, end) ELSE 0 END) AS me,
SUM(CASE WHEN user_id = 3 THEN TIMESTAMPDIFF(MINUTE, start, end) ELSE 0 END) AS ph
FROM time_entries
RIGHT JOIN calendar_table
ON time_entries.start=calendar_table.dt
WHERE start BETWEEN CURRENT_DATE - INTERVAL 1 MONTH AND CURDATE()
GROUP BY date
ORDER BY date
关于php - MySQL 填充空日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29350721/