您好我的SQL有点问题。我的问题是,当我过滤数据的日期时,我的SQL语句只返回2条记录,即用户的employee_id。
这是我在过滤日期时的工作代码的原始声明:
SELECT * FROM `rmguidef_prs`.`payment_report` WHERE DATE(`Report_Timestamp`) = DATE_ADD(CURDATE(), INTERVAL 24 HOUR) AND Employee_ID IN (
SELECT T1.Employee_ID from `rmguidef_prs`.`employee` T1
WHERE T1.Supervisor_ID = '".$id."')
OR Employee_ID = '".$id."'
这是我需要过滤器的修改过的语句:(工作正常)
SELECT * FROM `report` WHERE Employee_ID IN (
SELECT T1.Employee_ID from `employee` T1
WHERE T1.Supervisor_ID = '".$id."')
OR Employee_ID IN (
SELECT T2.Manager_ID from `branches` T2
WHERE T2.Manager_ID = '".$id."')
OR Employee_ID = '".$id."'
但是当我在语句中添加:DATE(
时间戳) = DATE_ADD(CURDATE(), INTERVAL 24 HOUR)
来过滤日期时显示的唯一记录来自:OR Employee_ID = '".$id."'
SELECT * FROM `report` WHERE DATE(`Timestamp`) = DATE_ADD(CURDATE(), INTERVAL 24 HOUR) AND Employee_ID IN (
SELECT T1.Employee_ID from `employee` T1
WHERE T1.Supervisor_ID = '".$id."')
OR Employee_ID IN (
SELECT T2.Manager_ID from `branches` T2
WHERE T2.Manager_ID = '".$id."')
OR Employee_ID = '".$id."'
我希望我的修改过的SQL语句按今天的日期,星期,月份和过去3个月进行过滤。我已经必须为这些过滤器编写代码,但我无法弄清楚如何将这些过滤器添加到我的语句中。
答案 0 :(得分:1)
在组标准中添加括号:
SELECT *
FROM `report`
WHERE DATE(`Timestamp`) = DATE_ADD(CURDATE(), INTERVAL 24 HOUR)
AND ( Employee_ID IN (SELECT T1.Employee_ID
FROM `employee` T1
WHERE T1.Supervisor_ID = '".$id."'
)
OR Employee_ID IN (SELECT T2.Manager_ID
FROM `branches` T2
WHERE T2.Manager_ID = '".$id."'
)
OR Employee_ID = '".$id."'
)
AND
优先于OR
,因此您的日期条件仅考虑三个Employee_ID
条件中的第一个。
编辑:在重新阅读您的问题后,我不完全确定上述内容是否属于您之后的情况,您的日期标准只会返回明天的日期,这可能不是&# 39; t存在于Timestamp
字段中,因此可能是真正的问题。