我正在尝试返回某个日期范围内商店中的所有记录。但是,如果商店在该日期之后开业,我想使用开业日期。有可能做这样的事情吗?我将 PHP 与 PDO 和 MySQL 一起使用:
select
store_name,
daily_sales
from
mytable
where
date between (if(open_date > :start_date, open_date, :start_date) and :end_date
所以你可以这样做:
select
store_name,
daily_sales
from
mytable
where
date between (select if(open_date > :start_date, open_date, :start_date)) and :end_date
问:有可能做这样的事情吗?
答:是的。
当然,您需要从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 ?