假设我有这个数组:
$city = ["toronto", "chicago", "potato"];
我的表格如下:
Table Name: city_table
id city
1 toronto, orlando
2 buffalo, toledo
3 orlando, tomato
4 potato, chicago, nanaimo
是否可以有一个查询给我这个结果?
id city
1 toronto, orlando
4 potato, chicago, nanaimo
我试过这个,但它显然不起作用:
$city_string = "'toronto', 'chicago', 'potato'";
SELECT * from city_table WHERE city IN $city_string
答案 0 :(得分:2)
要在MySQL中搜索以逗号分隔的值,请使用FIND_IN_SET
。它一次只能搜索1个项目,因此您需要为每个名称$city
单独调用它,并将它们与AND
结合使用。
SELECT *
FROM city_table
WHERE FIND_IN_SET('$city[0]', city_table)
OR FIND_IN_SET('$city[1]', city_table)
OR FIND_IN_SET('$city[2]', city_table)
在实际代码中,您应该使用implode()
动态构造WHERE子句。
请注意,表格中的逗号后面不能有空格,FIND_IN_SET
将无法按照您编写的方式使用CSV。
但是,最好规范化您的架构,这样您就不会有逗号分隔的值。 FIND_IN_SET
无法使用索引进行优化,因此必须执行全表扫描。
答案 1 :(得分:1)
您可以在MySQL使用FIND_IN_SET
。
示例强>
SELECT *
FROM city_table
WHERE FIND_IN_SET('$city[0]', city_table)
AND FIND_IN_SET('$city[1]', city_table)
AND FIND_IN_SET('$city[2]', city_table)