2013-04-04 69 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)"; 
相关问题