[英]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.