2014-11-16 2 views
0

안녕하세요 저는 SQL에 약간의 문제가 있습니다. 내 문제는 내 데이터의 날짜를 필터링 할 때 SQL 문을 경우에만 사용자의 employee_id 2 레코드를 반환합니다.여러 SELECT 문을 사용하는 SQL

이 내가 필터링 날짜에있는 내 작업 코드의 원본 문장입니다 :

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

그러나 이것을 다음과 같이 추가하십시오. Timestamp ) = 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 개월별로 필터링해야합니다. 이미 해당 필터를 코딩해야하지만이를 내 문장에 추가하는 방법을 알 수는 없습니다.

답변

1

그룹 기준에 괄호를 추가 : 날짜 기준 만 세 Employee_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."' 
    ) 

ANDOR보다 우선합니다.

편집 : 질문을 다시 읽은 후 위의 내용이 맞는지 확실하지 않지만 날짜 기준은 내일의 날짜가있는 레코드 만 반환하며 이는 Timestamp 필드에 존재하지 않을 수 있습니다. 그래서 그것은 아마도 진짜 문제 일 것입니다.

+0

오! 그 시간은 1 일 앞선 서버 시간과 맞춰 졌기 때문에 괜찮습니다. 이게 효과가 있는지 볼게. – user3771102

관련 문제