2012-03-01 94 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)) . ")"; 
相關問題