我的数据库中的列名为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%')


请让我知道我该如何实现。

最佳答案

使用FIND_IN_SET()

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

08-07 07:50