Php MySql使用if-else-in-where子句获取条件记录
在我的站点中,我必须存储两种类型的交货日期合同交货日期和订单的调整交货日期。基本上,合同日期是订单接收时产品的交货日期。调整日期是调整日期,可以小于或大于合同日期 下表如下:Php MySql使用if-else-in-where子句获取条件记录,php,mysql,sql,Php,Mysql,Sql,在我的站点中,我必须存储两种类型的交货日期合同交货日期和订单的调整交货日期。基本上,合同日期是订单接收时产品的交货日期。调整日期是调整日期,可以小于或大于合同日期 下表如下: id product_name condeldat adjdeldate ---------------------------------------- 1 drilling 2011-05 2012-01 2 lathe 2012-06 我必须检查是否有任何产品有
id product_name condeldat adjdeldate
----------------------------------------
1 drilling 2011-05 2012-01
2 lathe 2012-06
我必须检查是否有任何产品有调整日期,然后选择调整日期或合同日期
完成以下查询:
select id,
product_name,
if(adjdeldat is not NULL, adjdeldat, condeldat) as delivery_date
from orders
上面的查询很好,但我必须得到去年(现在是2011年)任何交货日期的产品(如果(adjdelcat不为NULL,adjdeldat,CondentDat))>。所以我的问题是如何在where子句中应用相同的if条件?您需要使用
和,或
使条件等价于
请尝试以下内容:
SELECT id,product_name,if(adjdeldat is not NULL,adjdeldat,condeldat) as delivery_date
FROM orders
WHERE ((adjdeldat is NULL and left(condeldat) > 2011) OR left(adjdeldat) > 2011)
要动态获取去年数据,您可以使用:
(left(curdate(),4)-1) in place of 2011
使用以下表达式:
select id, product_name,
if(adjdeldat is not NULL, adjdeldat, condeldat) as delivery_date
from orders HAVING delivery_date BETWEEN 'beginDate' AND 'endDate'
使用派生表/内联视图:
SELECT x.id, x.product_name, x.delivery_date
FROM (SELECT o.id, o.product_name, IFNULL(o.adjdeldat, o.condeldat) AS delivery_date
FROM ORDERS o) x
WHERE x.delivery_date BETWEEN '2011-01-01' AND '2011-12-31'
- 您可以用ANSI
COALESCE
或CASE语句替换IFNULL
- 始终比较具有相同数据类型的值,否则,如果存在索引,则查询无法使用索引
- 根据操作的不同,优化器可能会使用谓词推送(在本例中不太可能)将外部查询的过滤推送到内部查询中
你真的理解力很强。这正是我想要的。非常感谢翠鸟