具有IFNULL功能的MySQL WHERE IN条件

时间:2017-09-11 13:06:47

标签: php mysql where ifnull

我在WHERE IN条件下使用的IFNULL功能有问题:

SELECT provider_id FROM provider WHERE provider_id IN ( IFNULL("131, 132",'999') )

我尝试了所有引用的替代方案,如:

 SELECT provider_id FROM provider WHERE provider_id IN ( IFNULL("'131', '132'", '999') )

但不能用PHP完成这项工作。

您能否建议如何在IFNULL函数中正确格式化多值参数?

3 个答案:

答案 0 :(得分:0)

SELECT provider_id FROM provider WHERE provider_id IN ('131', '132', '999')

只需尝试上面的代码。

您不需要任何额外的报价或其他内容来执行您的查询。

答案 1 :(得分:0)

IFNULL不接受" 多值参数"。没有办法正确格式化它。

IFNULL函数只有两个参数。如果第一个参数的计算结果为NULL,则该函数返回第二个参数。否则,它返回第一个表达式。

即SQL表达式

  IFNULL(foo,'bar')

相当于

  CASE WHEN foo IS NULL THEN 'bar' ELSE foo END

此:

SELECT IFNULL("131, 132",'999')

返回:

IFNULL("131, 132",'999')  
--------------------------
131, 132                  

而且:

provider_id IN ( IFNULL("131, 132",'999') )

相当于:

provider_id = '131, 132'

目前尚不清楚您要完成什么,或者为什么IFNULL函数包含在声明中。

备份一个步骤,更清楚地表达您要解决的问题。

答案 2 :(得分:0)

首先,您的问题是使用IFNULL非空值,这没有任何意义。

其次IFNULL会返回单个值,因为它与provider_id IN (...)

相同,所以不需要为单个值执行provided_id=...

最后,如果你想检查PHP变量是否为null,那么让PHP处理它。

//$pdo_test
$query = "SELECT provider_id FROM provider";
if ($pdo_test !== null) {    
   $query = " WHERE provider_id=?"
}

然后你可以进行查询:

$stmt = $pdo->prepare($query);
if ($pdo_test !== null) {  
   $stmt->bindParam(1,$pdo_test,PDO::PARAM_INT); //Looks like an int, but change if its something else
} 
//Code like  $stmt->fetch() and processing goes here