我的数据库中的列名为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查询应返回食物类型为印度和中国的餐厅。
查询应如下所示:
SELECT * FROM restaurant WHERE cityname='Chicago' and foodtype
LIKE ('%Indian%,%Chinese%')
请让我知道我该如何实现。
最佳答案
SELECT *
FROM restaurant
WHERE cityname='Chicago'
and find_in_set(foodtype, 'Indian') > 0
and find_in_set(foodtype, 'Chinese') > 0
但是实际上,通过更改表结构可以使您更好。永不永不将多个值存储在一列中!
为此,您可以将其他两个表添加到数据库中
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