MySQL选择日期范围内的所有日期,即使当天没有数据可用

tut*_*dia 5 php mysql date

我每天都有条目作为打卡/打卡时钟.我想显示日期和周日的所有日期,并显示即使当天没有找到数据的日子.

例:

Monday 2015-05-04
- 2015-05-04 10:30:00
- 2015-05-04 15:45:34

Tuesday 2015-05-05
- 2015-05-05 08:43:23
- 2015-05-05 17:18:13

Wednesday 2015-05-06
- 2015-05-06 09:03:12

Thursday 2015-05-07
0 Entries

Friday 2015-05-08
0 Entries
Run Code Online (Sandbox Code Playgroud)

数据库架构如下所示:

id | user_id | punch_time | punch_status
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望能够将给予MySQL的日期更改为任何时间戳,并显示该周的日期和结果.

感谢:D


新的 任何想法为什么这不适用于没有记录存在的日子?

SELECT * FROM punch_clock, calendar_table WHERE calendar_table.dt = DATE(punch_clock.punch_time) && calendar_table.week_num = $week && calendar_table.y = $year ORDER BY punch_clock.punch_time
Run Code Online (Sandbox Code Playgroud)

较新的查询

 SELECT * FROM punch_clock LEFT JOIN calendar_table ON calendar_table.dt = DATE(punch_clock.punch_time) WHERE calendar_table.week_num = 18 && calendar_table.y = 2015;
Run Code Online (Sandbox Code Playgroud)

Pie*_*NAY 2

对于 MySQL,我通常使用日历表来实现此目的(例如,包含 2030 年之前的所有日期),
它允许执行许多其他操作,例如此类查询、管理特殊日期等。

你会想要LEFT JOIN你的桌子在上面,我的意思是这个日历表必须“左侧定位”

根据您的最后一个查询,我会这样做:

SELECT *
FROM calendar AS cal
LEFT JOIN punch_clock AS puc
  ON (cal.dt = DATE(puc.punch_time))
WHERE TRUE
  AND cal.week_num = 18
  AND cal.y = 2015
;
Run Code Online (Sandbox Code Playgroud)

没有尝试,但这就是想法。