2012-03-01 100 views
0

我有这样的阵列中的可变选择所有字段,其中字段值不是在阵列

​​

和数据库字段“区域”,它包含一个单一的值例如北

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

+1

你有什么试过的? '$ regions'从哪里来?因为这不是一个数组。 – 2012-03-01 20:11:42

+1

http://stackoverflow.com/questions/1519272/mysql-not-in-query – smp7d 2012-03-01 20:13:01

+0

我在窗体中有多个复选框。如果用户选择了南北和西部,我需要在Rocket的区域字段 – sah 2012-03-01 20:27:14

回答

3

你可以在SQL中使用WHERE field NOT IN('value1', 'value2', ...)来做到这一点。 Basic string functions可能足以让你的数组以这种格式。

+0

值在一个数组中,它们将根据用户选择而改变 – sah 2012-03-01 20:21:45

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变量是等中记载的字符串,而不是阵列。

如果是在此之前的数组,则很可能不需要将其转换为字符串(上面的代码将其转换回数组)。

+0

我试过这个,但这是我得到的: 警告:mysql_fetch_row():提供的参数不是有效的MySQL结果资源 – sah 2012-03-01 20:20:33

+0

@sheredia:是'$ regions数组或字符串,包含例如“北|西|南”? – Chris 2012-03-01 20:24:24

+0

好吧,它是一个信息数组转换成字符串 – sah 2012-03-01 20:28:39

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)) . ")"; 
相关问题