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

Php 如何在mysql中执行此三元操作?,php,mysql,Php,Mysql,从上面可以猜到,我运行了两个不同的查询并检查了3个字段,以确定PHP中的变量$p_price。我想将其浓缩到一个查询中,条件如下: 如果field1为空,则使用field2;如果field2为0,则使用Field3 第一部分可以用IFNULL(field1,field2)解决…但是我该怎么处理第二部分呢?我应该使用用例吗?我需要执行速度方面最有效的解决方案,因为这是一个非常大的查询的一部分 编辑: 既然你们中的一些人似乎不清楚这个问题,就把它作为一个替代方案 IF(IFNULL(field1,f

从上面可以猜到,我运行了两个不同的查询并检查了3个字段,以确定PHP中的变量$p_price。我想将其浓缩到一个查询中,条件如下: 如果field1为空,则使用field2;如果field2为0,则使用Field3

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

编辑:

既然你们中的一些人似乎不清楚这个问题,就把它作为一个替代方案

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

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

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

....
.....
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'];
......
..........
IF(field1不为空,field1,IF(field2 0,field2,field3))
这相当于:

  • 如果field1不为空,请使用field1,否则
  • 如果field2为非零,请使用field2,否则
  • 使用字段3
    • 您可以像下面这样使用

      IF(field1 IS NOT NULL, field1, IF(field2 <> 0, field2, field3))
      
      而且mysql也为您提供了非常好的条件语句

      如果还有一个案例,你可以像

      lets Try this :
      
      select if(Id is null, 0, id) as Id;
      

      如果我能进一步帮助您,请告诉我。

      您可以在Mysql中使用或。

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

      COALESCE(a,b,c,d,“banana”)意味着表达式将采用它遇到的第一个非空值,从左到右运行。它相当高效,只需要几个处理器周期


      它可以根据您的需要使用任意多的参数,从两个到数百万个。

      最好的方法是在一个大数据集上尝试并进行一些基准测试。
      mysql
      部分在哪里?
      mysql部分
      基本上是我在问在mysql查询中重写它的最佳方法:
      IF(IFNULL(field1,field2)>0,IFNULL(field1、field2、field3)
      编辑您的问题并插入MySQL部分。谢谢,但是field2不是空的,它是0或其他一些number@aoi我已将答案更新为检查字段2是否为非零而不是非空。
      SELECT USER_ID, (CASE USER_ID WHEN 1 THEN 1 ELSE 0 END) as FIRST_USER FROM USER