与逗号分隔列表匹配的MySQL模式

Dav*_*vid 0 regex mysql

我有一个包含餐厅信息的mySQL表。该信息的一部分是用逗号分隔的数字列表,该数字列表对应于餐厅提供的美食类型。我在从数据库中获取正确的信息时遇到了一些问题。桌子看起来像

id businessName cuisine_id
1  Pizza Place  2,3,4,
2  Burger Place 12,13,14,
Run Code Online (Sandbox Code Playgroud)

我想出了

SELECT * FROM restaurant WHERE cuisine_id LIKE "%2,%"
Run Code Online (Sandbox Code Playgroud)

但这给我带来了一个问题,即它与“ 2”,“ 12”和“ 22”匹配。

我也试过

SELECT * FROM restaurant WHERE cuisine_id LIKE "[^0-9]2,%"
Run Code Online (Sandbox Code Playgroud)

但是那什么也没返回。

有关如何编写此表达式的任何建议?

Avi*_*Raj 5

使用 regexp

SELECT * FROM restaurant WHERE cuisine_id REGEXP "(^|,)2,"
Run Code Online (Sandbox Code Playgroud)

对于num完全匹配,

SELECT * FROM restaurant WHERE cuisine_id regexp "(^|,)2(,|$)"
Run Code Online (Sandbox Code Playgroud)

请注意^$提到的是与行的开始和结束匹配的正则表达式锚。这(^|,)将匹配行的开头或逗号。因此,这确保了以下模式必须开始或以逗号开头。

  • 好的解决方案,但我当时想他应该更改他的数据库结构,因为将所有id保存在1个表中不是很好。我还建议去和Normailze(并利用关系)他的数据库。 (2认同)