2012-02-21 82 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将

相关问题