2014-11-16 193 views
0

嗨我有一個問題與我的SQL。我的問題是當我過濾數據的日期時,我的SQL語句只返回2個記錄,這是用戶的employee_id。SQL與多個SELECT語句

這是我工作的代碼原有聲明,我在過濾日期:

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."' 

我想通過今天的日期,星期,月份和最近3個月來過濾我修改SQL語句。我已經必須爲這些過濾器編寫代碼,但我無法弄清楚如何將這些添加到我的聲明中。

回答

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標準。

編輯:在重新閱讀您的問題後,我不完全確定上述內容是否在您之後,您的日期標準將僅返回明天的日期記錄,這可能不存在於Timestamp字段中,所以這可能是真正的問題。

+0

哦!它可以,因爲時間與提前1天的服務器時間一致。我會看看這是否有效。 – user3771102