在LIKE中使用逗号分隔的mySQL列值

时间:2014-06-21 15:34:03

标签: php mysql sql

我的数据库中有一列名为foodtype的列。表名是餐馆,列foodtype有逗号分隔值(印度语,中文)。

现在,当一个人选择中文时,我希望mysql查询应该返回foodtype为中文的餐馆。

查询应如下所示:

SELECT * FROM restaurant WHERE cityname='Chicago' and foodtype 
LIKE ('%Chinese%')

当一个人选择印度人然后我想要mysql查询应该返回foodtype是印度人的餐馆。

查询应如下所示:

SELECT * FROM restaurant WHERE cityname='Chicago' and foodtype 
LIKE ('%Indian%')

当一个人选择印度人和中国人时,我想要mysql查询应该返回foodtype是印度人和中国人的餐馆。

查询应如下所示:

SELECT * FROM restaurant WHERE cityname='Chicago' and foodtype 
LIKE ('%Indian%,%Chinese%')

请让我知道如何实现这一目标。

1 个答案:

答案 0 :(得分:1)

使用FIND_IN_SET()

SELECT * 
FROM restaurant 
WHERE cityname='Chicago' 
and find_in_set(foodtype, 'Indian') > 0
and find_in_set(foodtype, 'Chinese') > 0

但实际上你通过改变你的桌面结构会更好。永远不会永远不会在一列中存储多个值!

要实现这一点,您可以在数据库中添加2个其他表

foodtypes table
---------------
id
name


restaurant_foodtypes
--------------------
restaurant_id
foodtype_id

示例数据:

foodtypes
id   |  name
1    |  chinese
2    |  indian

restaurant_foodtypes
restanrant_id  |  foodtype_id
1              |  1
1              |  2

然后你可以选择像这样的食物类型的餐馆

select r.name
from restaurants r
join restaurant_foodtypes rf on rf.restaurant_id = r.id
join foodtypes f on rf.foodtype_id = f.id
where f.name in ('indian','chinese')
group by r.name
having count(distinct f.name) = 2