Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从数据库中获取给定月份和年份的所有日期的记录,如果数据库中不可用,则为空_Php_Mysql - Fatal编程技术网

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_考勤表中不存在的日期。这将打印给定年份和月份的记录,而不是给定月份和年份数据库中不存在的日期。见预期结果。