我的数据库中有一列名为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%')
请让我知道如何实现这一目标。
答案 0 :(得分:1)
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