簡體   English   中英

MySQL WHERE IN條件與IFNULL函數

[英]MySQL WHERE IN condition with IFNULL function

我在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函數中正確格式化多值參數?

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

只需嘗試上面的代碼。

您不需要任何額外的引號或執行查詢的內容。

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函數。

備份一個步驟,並更清楚地表達您要解決的問題。

首先,您的問題是對非空值使用IFNULL ,這沒有任何意義。

其次, IFNULL將返回單個值,無需為單個值執行provider_id IN (...) ,因為它與provider_id IN (...) provided_id=...相同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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM