SELECT在数组中的csv中的任何值

时间:2015-05-14 16:14:49

标签: php mysql

假设我有这个数组:

$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

2 个答案:

答案 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)