2013-08-07 64 views
0

我試圖從特定日期範圍內的商店中返回記錄所有記錄。但是,如果商店在該日期之後開放,我想使用開放日期。是否有可能做這樣的事情?我使用PHP和PDO和MySQL: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

問:是否有可能做這樣的事情?

A:是的。

當然,你會想要從if前刪除多餘的paren。沒有閉幕詞,即使存在,在這種情況下,將表達式包裝在parens中也是不必要的。

有一個潛在的問題需要注意。 PDO文檔對此沒有明確說明,但我不認爲您可以在聲明中多次使用指定的綁定佔位符。對於示例語句,你需要使用三個不同名稱的佔位符,例如

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

的代碼將需要綁定值三個命名佔位符。

與代碼使用三個位置佔位符時的模式類似。

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