我有一个包含餐馆信息的mySQL表。部分信息是以逗号分隔的数字列表,与餐厅所服务的菜肴类型相对应。我在从数据库中获取正确信息时遇到一些问题。表看起来像
id businessName cuisine_id
1 Pizza Place 2,3,4,
2 Burger Place 12,13,14,
我想出了
SELECT * FROM restaurant WHERE cuisine_id LIKE "%2,%"
但这让我遇到了与“2”,“12”和“22”匹配的问题。“
我也试过
SELECT * FROM restaurant WHERE cuisine_id LIKE "[^0-9]2,%"
但这没有任何回报。
有关如何编写此表达式的任何建议吗?
答案 0 :(得分:4)
使用regexp
SELECT * FROM restaurant WHERE cuisine_id REGEXP "(^|,)2,"
对于num完全匹配,
SELECT * FROM restaurant WHERE cuisine_id regexp "(^|,)2(,|$)"
请注意,^
,$
被称为正则表达式锚点,它与行的开头和结尾相匹配。此(^|,)
将匹配行的开头或逗号。因此,这确保了以下模式必须在开头或以逗号开头。
答案 1 :(得分:1)
无需使用正则表达式,您可以使用FIND_IN_SET字符串函数:
SELECT * FROM restaurant WHERE FIND_IN_SET('2', cuisine_id)>0
或使用CONCAT:
SELECT * FROM restaurant WHERE CONCAT(',', cuisine_id, ',') LIKE '%,2,%'
或更好地规范化您的数据库结构(在单个字段中存储逗号分隔值通常不是一个好主意)