选择字段值不在数组中的所有字段

时间:2012-03-01 20:09:50

标签: php mysql

我在变量

中有这个数组
$regions = |north|south|west|

和包含单个值的数据库字段“Region”,例如北

我需要一个select语句,它将选择“Region”的值不是数组中列出的任何值的所有字段。例如北,南,西。

3 个答案:

答案 0 :(得分:3)

您可以使用WHERE field NOT IN('value1', 'value2', ...)在SQL中执行此操作。 Basic string functions可能足以以这种格式获取数组。

答案 1 :(得分:1)

$regions = "north|west|south";
$regionsArray = explode('|', $regions);

for ($i = 0; $i < count($regionsArray); $i++) {
    $regionsArray[$i] = "'" . $regionsArray[$i] . "'";
}

$query = "SELECT *
FROM ...
WHERE Region NOT IN (" . implode(",", $regionsArray) . ")";

这假设您的$regions变量是一个类似于描述的字符串,而不是数组。

如果它之前是一个数组,那么很可能不需要将它转换为字符串(上面的代码将其转换回数组)。

答案 2 :(得分:0)

也许你忘记了mysql_real_escape_string()?

function db_escape($value)
{
    return '"'.mysql_real_escape_string($value).'"';
}

$regions = array('north','west','south');

$query = "SELECT *
FROM `table`
WHERE `Region` NOT IN (" . implode(",", array_map('db_escape',$regions)) . ")";