我正在构建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 +
+++++++++++++++++++++++++++
答案 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);