Php 从数据库中获取给定月份和年份的所有日期的记录,如果数据库中不可用,则为空
我正在尝试从员工考勤表中获取记录。我想得到给定月份和年份的所有日期记录。如果当天没有可用记录,则只显示日期,其他字段为空。下表:Php 从数据库中获取给定月份和年份的所有日期的记录,如果数据库中不可用,则为空,php,mysql,Php,Mysql,我正在尝试从员工考勤表中获取记录。我想得到给定月份和年份的所有日期记录。如果当天没有可用记录,则只显示日期,其他字段为空。下表: Table: emp_attendance id emp_id attendance_date attendance reason 1 1 2014-08-01 P 2 1 2014-08-02 A seek . . . 26 1 2014
Table: emp_attendance
id emp_id attendance_date attendance reason
1 1 2014-08-01 P
2 1 2014-08-02 A seek
.
.
.
26 1 2014-08-26 P
在给定的表格中,假设没有某些特定日期的记录,例如2014-08-27、2014-08-28、2014-08-292014-08-302014-08-31
那么我怎样才能得到2014年8月的记录,如下面的结果
Expected Result Would Be:
date id emp_id attendance reason
2014-08-01 1 1 P
2014-08-02 2 1 A seek
.
.
.
2014-08-26 26 1 P
2014-08-27 NULL NULL NULL NULL
2014-08-28 NULL NULL NULL NULL
2014-08-29 NULL NULL NULL NULL
2014-08-30 NULL NULL NULL NULL
2014-08-31 NULL NULL NULL NULL
您需要创建一个包含当月所有日期的表。那你就可以了
SELECT d.date, a.*
FROM dates AS d -- This is the table with all days
LEFT JOIN emp_attendance AS a ON d.date = a.attendance_date
ORDER BY d.date
如果日期表仅包含日期,而不是完整日期,则可以执行以下操作:
SELECT d.date, a.*
FROM dates AS d -- This is the table with all days
LEFT JOIN emp_attendance AS a ON d.date = DAY(a.attendance_date)
AND YEAR(a.attendance_date) = 2014 AND MONTH(a.attendance_date) = 8
ORDER BY d.date
请尝试以下代码:
从emp_考勤中选择*,其中
年出席率(日期为2014年)和月出席率(日期为8年)
按出席日期排序
如果您需要再添加一个条件,那么您也可以添加,并且考勤为空,原因为空它为所有日期打印空。考勤\ U日期字段的数据类型是什么?它应该可以工作。你能制作一个sqlfiddle来显示你尝试了什么吗?日期表在哪里?我自己做的,请看我的fiddle。这不会显示emp_考勤表中不存在的日期。这将打印给定年份和月份的记录,而不是给定月份和年份数据库中不存在的日期。见预期结果。