2012-02-21 81 views
2

是否可以使用PHP中的數組對數據庫中的數據進行查詢?使用PHP中的數組在多列上的數據進行查詢

實施例:

SELECT * FROM rooms WHERE Facility1,Facility2,Facility3,Facility4,Facility5,Facility6,Facility7,Facility8,Facility9 = ' { Array Values Here } ' 

我有存儲在數組中的複選框的值的列表,我只需要選擇這些。如果不可能,我該如何運行查詢來選擇這些?

回答

3

當然也可以查詢多個字段:

WHERE Facility1 = 'value1' AND Facility2 = 'value2' ... 

這是標準的SQL,你會發現它在MySQL手冊記錄以及:

針對您的特定問題(複選框數組值),這很大程度上取決於您需要將複選框數組值映射到mysql數據庫中的字段以創建一個合理的SQL語句。

由於您沒有在旁邊提供任何信息,因此它是一個數組,但沒有太多可以作爲示例給出,只是將這些數組值映射到數據庫列。

$columns = array('Facility1' => 'checkboxname1', 'Facility2' => 'checkboxname2'); 
$query = 'SELECT * FROM rooms WHERE '; 
$queryWhereAnd = array(); 
foreach($columns as $column => $name) 
{ 
    $queryWhereAnd[] = sprintf('%s = \'%s\'', $column, mysql_real_escape_string($_POST[$name])); 
} 
$query .= implode(' AND ', $queryWhereAnd) . ';'; 
+0

? – methuselah 2012-02-21 23:12:11

+0

@hakre如果他有使用數組,或者他將不得不使用foreach來遍歷數值,會有辦法嗎? – ppp 2012-02-21 23:15:01

+0

我添加了一些示例代碼塊,但很難說這個問題是否恰好合適。所以這只是一個簡單的例子,它可能是一些映射的外觀。它不處理未設置的複選框(並且它假定POST方法),所以請注意並根據需要擴展'foreach'部分。 – hakre 2012-02-21 23:24:34

0

是的,這裏的格式:

SELECT * 
FROM rooms 
WHERE (field1, field2, field3, field4) 
IN 
    (('value1', 'value2', 'value3', 'value4')) 

但它可能會掃描所有行(不使用索引)。這是一些值最佳分割爲hakre提示:

WHERE Facility1 = 'value1' AND Facility2 = 'value2' ... 
+0

我現在有:'「選擇*從房間哪裏(Facility1,Facility2,Facility3,Facility4)IN((''。implode('','」,$ option)。''))';' - 是否意味着它會檢查設施1或設施2或設施3中的匹配值? – methuselah 2012-02-21 23:31:50

+0

在我的示例中,field1必須匹配value1,field2必須匹配value2等。 – 2012-02-22 13:40:12

0

的colsest東西給你在找什麼,我覺得太可怕了:)

試試這個:

select * from rooms 
where (facility1, facility2, facility3) in (select 'Val1', 'Val2', 'Val3') 

確保來自PHP的結果字符串導致類似的查詢。

Example

PS:我堅持您使用的陣列來查詢多個字段使用AND將

相關問題