2011-12-15 5 views
2

여기 새내기. 아래 코드는 내가 원하는 결과를 반환하는 훌륭한 일을하고 있습니다. 유일한 문제는 특정 날짜 범위 만 반환하는 방법을 알아낼 수 없다는 것입니다 (checkdate 열에 있음). 내가 checkdate의 날짜별로 걸러 낼 수있는 유일한 방법은 empchecks.checkdate에 의해 GROUP BY를 사용하고 HAVING checkdate> =를 사용하는 것입니다. 하지만 나는 employees.enum에 의해 GROUP BY해야합니다. 나는 간단한 것을 놓치고 있다고 확신한다.group_concat의 필터링 결과, 내부 조인 쿼리

SELECT employee_data.a, 
      employees_data.b, employee_data.c, 
      GROUP_CONCAT(empchecks.d 
       ORDER BY empchecks.checkdate 
       SEPARATOR '<br /> ') 
      AS checknum, 
      GROUP_CONCAT(empchecks.checkdate 
       ORDER BY empchecks.checkdate  
       SEPARATOR '<br /> ') 
      AS checkdate, 
     FROM employees 
INNER JOIN empchecks ON employees.enum = empchecks.enum 
    GROUP BY empchecks.enum 
+0

checkdate 열을 WHERE 절로 만드는 블록을 이동 시켜야만 특정 값과 비교할 수 있습니다. – Julien

답변

0

WHERE 절을 추가해야합니다. 또한 약간의 수정 - AS checkdate 이후의 마지막 쉼표는 없어야합니다.

SELECT employee_data.a, employees_data.b, employee_data.c, 
     GROUP_CONCAT(empchecks.d ORDER BY empchecks.checkdate SEPARATOR '<br /> ') as checknum, 
     GROUP_CONCAT(empchecks.checkdate ORDER BY empchecks.checkdate SEPARATOR '<br /> ') as checkdate 
    FROM employees 
     INNER JOIN empchecks 
      ON employees.enum = empchecks.enum 
    WHERE empchecks.checkdate >= @begin_date 
     AND empchecks.checkdate <= @end_date 
    GROUP BY empchecks.enum; 
+0

예, 괜찮습니다 ... 14000 번 시도한 것을 맹세하지만. 그러나 날짜를 변수 $ startdate로 바꿀 때 결과를 전혀 필터링하지 않습니다. 나는 그 날짜 범위를 $ name = $ _POST [ "startdate"] 페이지 2로 보내는 1 페이지의 입력 상자가 있습니다. $ startdate로 날짜를 바꾸면 필터가 적용되지 않은 결과가 반환되는 이유는 무엇입니까? –