具有未知选择条件数的WHERE语句

时间:2014-06-06 11:02:37

标签: php mysql

我正在构建Web服务脚本。脚本以字符串的形式接收类别的用户首选项 - 例如,1,5,6,8,15,。我需要从数据库表中选择所有记录,其类别与用户选择的类别相对应。

我需要SELECT,在这种情况下会返回A,D和E记录。

也许最好的方法是爆炸字符串,并在每次迭代中使用不同WHERE条件的查询为每个子字符串做一个循环?

+++++++++++++++++++++++++++
+ id + record1 + category +
+++++++++++++++++++++++++++
+ 1  +   A     +     5    +
+ 2  +   B     +     20   +
+ 3  +   C     +     7    +
+ 4  +   D     +     1    +
+ 5  +   E     +     6    +
+ 6  +   F     +     3    +
+++++++++++++++++++++++++++ 

3 个答案:

答案 0 :(得分:2)

最好的方法是展开字符串并生成如下所示的查询:

select *
from table t
where id in (1, 5, 6, 8, 15);

这将允许使用id上的索引优化查询。

请注意,这与以下条件不同:

where id in (@values)

在这种情况下,@values将被视为值为1,5,6,8,15的单个字符串,并且可能不匹配任何行。

正如Juergen指出的那样,您可以使用find_in_set()来达到此目的。该解决方案无法利用id上的索引。

答案 1 :(得分:1)

select * from your_table
where find_in_set(id, @input) > 0

答案 2 :(得分:0)

您没有显示如何收集这些选择。我假设你将它们放在一个数组$cats中。然后,您可以使用implode()

$sql = "SELECT field FROM table WHERE category = ".implode(" || category = ", $cats);