2013-08-07 2 views
0

특정 날짜 범위 내의 상점에서 모든 레코드를 레코드로 반환하려고합니다. 그러나 날짜 이후에 상점이 열리면 영업일을 사용하고 싶습니다. 이런 식으로 할 수 있습니까? 나는 PDO와 MySQL과 PHP를 사용하고 있습니다 :BETWEEN 절의 PHP/PDO/MySQL if 문

select 
    store_name, 
    daily_sales 
from 
    mytable 
where 
    date between (if(open_date > :start_date, open_date, :start_date) and :end_date 
+5

간단한 대답 : 당신은 왜 그것을 시도하지? 유효한 값으로 쿼리를 해킹하고 직접 실행 해 보는 것만으로도 충분합니다. 여기에 질문을 입력하고 형식을 지정하는 것보다 시간을 절약 할 수 있습니다. –

+0

표현식이 허용되는 곳에 'IF()'표현식이 유효하지 않다고 믿을만한 이유가 있습니까? – spencer7593

+0

상점에 영업일 이전에 기록이 있습니까? 그렇지 않으면 열려있는 날짜를 무시하고 시작 날짜 만 사용하면됩니다. –

답변

0

그래서 당신은 이런 식으로 작업을 수행 할 수 있습니다

select 
    store_name, 
    daily_sales 
from 
    mytable 
where 
    date between (select if(open_date > :start_date, open_date, :start_date)) and :end_date 
-1

Q :이 같은 것을 할 수 있습니까?

대답 : 예.

물론, if 앞에서 관계없는 괄호를 제거하고 싶을 것입니다. 닫는 괄호가없고, 존재한다고해도 괄호 안의 표현은 그 맥락에서 불필요합니다.

주목할만한 문제점이 하나 있습니다. PDO 문서는 이것에 대해 명시 적 이진 않지만, 성명에서 바인드 자리 표시자를 두 번 이상 사용할 수 없다고 생각합니다. 예 문를 들어, 명명 된 자리의 세 가지 값을 결합 할 필요가 예를

date BETWEEN IF(open_date > :start_date, open_date, :start_date_2) AND :end_date 
                   ^^ 

코드를 들어, 자리 세 다른 이름을 사용해야 할 것입니다.

코드에서 위치 지정자 세 개를 사용하는 경우 패턴과 유사합니다.

date BETWEEN IF(open_date > ? , open_date, ?) AND ?