我如何在mysql中执行此三元操作?

时间:2013-07-05 05:57:50

标签: php mysql

....
.....
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,我不相信这是非常有效的,所以我正在寻找一个更好的查询/条件来重写同样的事情。

4 个答案:

答案 0 :(得分:7)

您可以在MySQL中使用IF(condition, val-if-true, val-if-false)

您还可以嵌套IF()函数,如下所示:

IF(field1 IS NOT NULL, field1, IF(field2 <> 0, field2, field3))

这对应于:

  • 如果field1为NOT NULL,请使用field1,否则使用...
  • 如果field2非零,请使用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”)表示表达式将采用它遇到的第一个非空值,从左到右。它非常高效,只需几个处理器周期。

它可以根据需要采用尽可能多的参数,从两个到数十亿个。

相关问题