2013-04-04 65 views
0

我有這個estructure表:是否可以完全匹配「WHERE IN」查詢中的值?

ID | level1 | level2 | level3 

每場店的整數。然後,我有一個這樣的數組:$陣列(1,2,8,9,15)

我想包含在任何領域的數組中的值1級,級別2或3級的所有行。

我試試這個:

SELECT P.* FROM table P 
WHERE level1 OR level2 OR level3 IN (".$array.") 

的問題是,如果陣列例如包含數字1,查詢得到了10,11,12 ...

有什麼辦法來行使值完全匹配?

回答

3

的問題是不是你認爲它是。正如現在所寫,您的查詢將返回任何行,其中level1!= 0或level2!= 0或level3在您的列表中,因爲level1和level2正在評估爲布爾值。

你必須3項獨立IN條款,這樣的:

SELECT P.* 
FROM table P 
WHERE level1 IN (...) 
OR level2 IN (...) 
OR level3 IN (...) 
0

你可以使用FIND_IN_SET

SELECT P.* FROM P 
WHERE 
    FIND_IN_SET(level1, '".$array."') OR 
    FIND_IN_SET(level2, '".$array."') OR 
    FIND_IN_SET(level3, '".$array."') 

請參閱小提琴here

1

中選擇需要與數組中的值中的一個的精確匹配。這裏有幾個問題。首先,你不能使用或喜歡使用的是不需要specifiy的IN像這樣每場:

SELECT P.* FROM table P 
WHERE 
level1 IN (...) 
OR level2 IN (...) 
OR level3 IN (...) 

其次,你不能只是呼應你的陣列出像類似嘗試是這樣的:

$in_string = "'" . implode("','", $array) . "'"; 
$query = "SELECT P.* FROM table P 
    WHERE 
    level1 IN ($in_string) 
    OR level2 IN ($in_string) 
    OR level3 IN ($in_string)"; 
相關問題