Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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
Mysql SQL-日期范围返回所有数据_Mysql_Sql - Fatal编程技术网

Mysql SQL-日期范围返回所有数据

Mysql SQL-日期范围返回所有数据,mysql,sql,Mysql,Sql,我有一个简单的PHP web应用程序,用于Employee的日常考勤 我有一个名为emp_master的表,其中包含所有员工数据 比如说 emp_id emp_name 1001 Abby 1002 Buub 还有另一个名为timesheet_tran的表,当员工登录到系统时,该表包含dailt事务 timesheet_tran table date emp_id 02/01/14 1001 02/01/14 1002 03/01/14 1001

我有一个简单的PHP web应用程序,用于Employee的日常考勤 我有一个名为
emp_master
的表,其中包含所有员工数据 比如说

emp_id   emp_name
1001     Abby
1002     Buub
还有另一个名为
timesheet_tran
的表,当员工登录到系统时,该表包含dailt事务

timesheet_tran table
date       emp_id 
02/01/14   1001
02/01/14   1002
03/01/14   1001
04/01/14   1001
04/01/14   1002
我试图找出一个返回数据的查询,日期范围之间的查询将显示在日期范围之间当天已登录/未登录的所有员工

我需要展示

emp_id   date      absent/present
1001     02/01/14  present
1002     02/01/14  present
1001     03/01/14  present
1002     03/01/14  absent
我试过了

SELECT m.emp_id,t.date FROM timesheet_tran as t RIGHT OUTER JOIN emp_master m ON t.date BETWEEN '02/01/14' AND '04/01/14' AND t.emp_id = m.emp_id
但我需要记录提到的每个日期

SELECT m.emp_id,t.date 
FROM timesheet_tran as t 
RIGHT OUTER JOIN emp_master m ON t.date 
AND t.date BETWEEN '2014-02-01' AND '2014-04-01'
 AND t.emp_id = m.emp_id
编辑:从您更新的评论中,您需要查询所有用户的加入,以使他们无论是否存在都将被列出

SELECT m.emp_id,t.date 
FROM emp_master as m 
LEFT JOIN timesheet_tran t ON date
这将列出所有用户条目。如果时间表数据不存在,将返回空值。然后,您可以将其转换为您认为合适的字符串缺席/存在

    SELECT m.emp_id, 
CASE WHEN t.date IS NOT NULL 
       THEN 'present'
       ELSE 'absent'
END AS T_date
FROM emp_master as m 
LEFT JOIN timesheet_tran t ON date
像这样试试

Select emp_id,emp_name,Date1,(
CASE WHEN EXISTS(
sELECT emp_id FROM timesheet_tran AT WHERE T.emp_id =AT.emp_id AND T.date1=AT.date
) then 'Present' Else 'Absent' End )as Status
FROM
(
Select emp_id ,emp_name,Cast(date as DATE)AS DATE1 from emp_master a,(Select Distinct date    from timesheet_tran ) b
) T

希望这对您有所帮助

这与我上面提到的相同吗?不,请注意第4行的“AND t.date”。另外,请注意默认的mysql日期格式:请参见此处进行讨论。这将只在我不知道的情况下返回其不在日期范围内的员工,但我想要每个日期的所有员工,如果他们不在/呈现一些东西,比如我在PHP中有一个循环,用于(从到日期){单独执行每个日期的查询}都德,,,你太棒了,你能推荐一些学习如何编写此类查询的好方法吗。这个效果非常好:D