....
.....
if ($prod_price->RecordCount()>0) {
$p_price = $prod_price->fields['options_values_price'];
}
else
{
$p_price = $orders_products_query->fields['products_price'];
}
$p_price = ($p_price>0)?$p_price:$orders_products_query->fields['final_price'];
......
..........
从上面可以猜到,我正在运行两个不同的查询并检查3个字段以确定PHP中的变量$ p_price。我想在一个查询中压缩它,条件是: 如果field1为Null,则使用field2,如果field2为0,则使用字段3。
第一部分可以用IFNULL(field1,field2)解决....但是我该如何处理第二部分呢?我应该用案例吗?我需要在执行速度方面最有效的解决方案,因为这是一个非常大的查询的一部分。
修改
由于你们中的某些人似乎不清楚这个问题,所以可以选择这个。
IF(IFNULL(field1,field2)>0,IFNULL(field1,field2),field3)
上面的MySQL查询条件适用于上面提到的逻辑,但正如你所看到的,它为NULL检查两次评估field1和field2,我不相信这是非常有效的,所以我正在寻找一个更好的查询/条件来重写同样的事情。
答案 0 :(得分:7)
您可以在MySQL中使用IF(condition, val-if-true, val-if-false)
。
您还可以嵌套IF()
函数,如下所示:
IF(field1 IS NOT NULL, field1, IF(field2 <> 0, field2, field3))
这对应于:
答案 1 :(得分:1)
你可以使用如下
lets Try this :
select if(Id is null, 0, id) as Id;
还有mysql为条件语句提供了非常好的document
此外,如果还有一个案例可以使用
SELECT USER_ID, (CASE USER_ID WHEN 1 THEN 1 ELSE 0 END) as FIRST_USER FROM USER
让我知道我是否可以帮助你。
答案 2 :(得分:1)
您可以在Mysql中使用ISNULL()或IS NOT NULL()。
答案 3 :(得分:1)
标准的SQL COALESCE函数看起来就像你需要的那样:
COALESCE(a,b,c,d,“banana”)表示表达式将采用它遇到的第一个非空值,从左到右。它非常高效,只需几个处理器周期。
它可以根据需要采用尽可能多的参数,从两个到数十亿个。