4
....
.....
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,使用 field 3。

第一部分可以用 IFNULL(field1,field2)....解决,但是第二部分我该怎么办?我应该使用案例吗?我需要在执行速度方面最有效的解决方案,因为这是一个非常大的查询的一部分。

编辑:

由于你们中的某些人似乎不清楚这个问题,因此请将此作为替代方案。

IF(IFNULL(field1,field2)>0,IFNULL(field1,field2),field3) 上面的 MySQL 查询条件与上面提到的逻辑一起工作,但是正如你所看到的,它对 field1 和 field2 进行两次评估以进行 NULL 检查,我认为这不是很有效,所以我正在寻找一个更好的查询/条件来重写同样的事情。

4

4 回答 4

7

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

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

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

这对应于:

  • 如果 field1 不为 NULL,则使用 field1,否则...
  • 如果 field2 不为零,则使用 field2,否则...
  • 使用字段3
于 2013-07-05T06:00:28.947 回答
2

标准 SQL COALESCE 函数看起来像您需要的那样:

COALESCE(a, b, c, d, "banana") 意味着表达式将采用它遇到的第一个非空值,从左到右工作。它非常有效,只需要几个处理器周期。

它可以根据需要采用任意数量的参数,从两个到数以百万计。

于 2013-07-05T06:29:00.887 回答
1

你可以像下面这样使用

lets Try this :

select if(Id is null, 0, id) as Id;

并且 mysql 还为您提供了非常好的文件条件语句

此外,如果您还可以使用另一种情况,例如

SELECT USER_ID, (CASE USER_ID WHEN 1 THEN 1 ELSE 0 END) as FIRST_USER FROM USER

让我知道我是否可以进一步帮助您。

于 2013-07-05T06:01:15.213 回答
1

您可以在 Mysql中使用ISNULL()IS NOT NULL() 。

于 2013-07-05T06:03:24.863 回答