一尘不染

根据列中的逗号分隔值从MySQL表中获取记录

sql

我从名为的表中获取记录Pizza_Table

Pizza_table 架构图

id | pizza name | pizza_topping_ids
1  | pizza1     |1,2,3
2  | pizza2     |2,3
3  | pizza3     |4,5,6

实际上,我的功能是根据pizza_topping_ids 我在此搜索中分配的工作来搜索披萨。但我找不到合适的解决方案。。

我不能使用IN子句来获取记录。

我已经尝试了:

1)

 SELECT * 
 FROM `pizza_table` 
 WHERE `pizza_topping_id` REGEXP '[[:<:]]2[[:>:]]'

问题:获取所有具有价值的记录 2

2)

SELECT * 
FROM `pizza_table` 
WHERE `pizza_topping_id` REGEXP '[[:<:]]1,2,3,4[[:>:]]'

但MySQL返回的结果集为空,

如果以逗号分隔的值与任何记录都不匹配,则返回topping_id列中最有价值的结果。

例:如果我在上面的查询中查找了具有1,2,3,4
topping_id的披萨,但是在数据库中不存在具有topping_id组合的披萨,那么结果将是覆盖最多的ID,应显示为’pizza1’具有pizza_topping_id1,2,3

对不起,英语以及格式也很糟糕,但是请尝试理解我的问题。提前致谢。

请帮我。


阅读 139

收藏
2021-03-08

共1个答案

一尘不染

只需尝试-

SELECT * FROM `pizza_table` WHERE  FIND_IN_SET(2,pizza_topping_id)

或REGEXP

SELECT * FROM `pizza_table` WHERE pizza_topping_id REGEXP '^2,|,2$|,2,' OR pizza_topping_id =2

请看演示:demo

2021-03-08