2012-09-25 2 views
0

데이터베이스에 시간 초과 이벤트를 저장했습니다. 이러한 이벤트는 매년, 분기 별, 매월, 매주 및 매일 발생합니다. 그래서 이벤트 유형을 저장하는 테이블을 추가했습니다.타이밍 이벤트에서 mysql 문자열을 정의 된 mysql 변수로 변환

이제는 이벤트 만 선택하고 싶습니다. 그래서 나는 이벤트의 시작 날짜를 선택하고, 그 시간 (YEAR, QUARTER, 등)에 시간을 더한 다음 그 날짜가 오늘 날짜인지를보고 싶다.

이것은 어디 문이 될 것입니다 :

WHERE (
    DATEDIFF(NOW(), 
     DATE_ADD(
      IFNULL(
       timer.last_trigger, 
       timer.start_date 
      ), 
      INTERVAL 1 timer.period_type 
     ) 
    ) 
) = 0 

그것이 말하는 점에 쿼리 나누기 :

INTERVAL 1 timer.period_type 

그해야하기 때문에 같은 : 그래서

INTERVAL 1 YEAR 

내 '변수'timer.period_type'YEAR' 값으로 변환하고 싶습니다. 정의 된 mysql 변수 YEAR. 그리고 그것이 QUARTER, MONTH, WEEK 또는 DAY 일 경우 같은 일을합니다.

방법이 있습니까, 아니면 해결 방법이 있습니까? timer.period_type의 열 유형을 변경하는 것이 가능합니까? PHP로 데이터를 루핑하는 것을 막고 싶습니다.

답변

1

물론, 해결 방법, 당신은 예를 들어, CASE 문을 사용할 수있다 :

SELECT BLA-BLA-BLA 
/*MORE CODE HERE*/ 

WHERE (
    DATEDIFF(NOW(), 
    CASE timer.period_type 
    WHEN 'YEAR' THEN 
     DATE_ADD(IFNULL(timer.last_trigger,timer.start_date), INTERVAL 1 YEAR) 
    WHEN 'MONTH' THEN 
     DATE_ADD(IFNULL(timer.last_trigger,timer.start_date), INTERVAL 1 MONTH) 
    WHEN 'WEEK' THEN 
     DATE_ADD(IFNULL(timer.last_trigger,timer.start_date), INTERVAL 1 WEEK) 
    WHEN 'DAY' THEN 
     DATE_ADD(IFNULL(timer.last_trigger,timer.start_date), INTERVAL 1 DAY) 
    END 
) 
)= 0 
+0

내가 아이디어를 좋아하지만, 어떻게 든 CASE 시스템은'INTERVAL 1 YEAR' 작동하지 않습니다 ... 모든 그 해결 방법은? :-) –

+0

물론, 1 년 = 365 일 또는 12 개월이라고합시다. :) – bodi0

+0

아, 알겠습니다. 'INTERVAL 1 YEAR' ** only **는 DATE_ADD() 함수 내에서 작동합니다. 따라서 모든 경우에이 기능을 반복해야합니다. 그에 따라 귀하의 답변을 수정하겠습니다. –

관련 문제