我意识到这个问题的标题可能尖叫“重复”,但我认为不是(至少如果是,我还没有看到它)。
我目前正在数据库中存储一个以逗号分隔的列表,例如1,3,5,6,13
,但当SELECT id FROM users WHERE additional_usergroups LIKE '%3%'
3
和13
出现时。
有没有办法解决这个问题?
修改
我只希望 3 出现在结果中,抱歉这个问题太模糊了。
感谢。
答案 0 :(得分:5)
这就是RDBMS具有规范化指南的原因。我鼓励您阅读关于规范化以及为什么数据库中的值应该是单数的。
但是,解决这个问题的方法包括只有3的所有可能性:
additional_usergroups LIKE '3'
OR additional_usergroups LIKE '%,3,%'
OR additional_usergroups LIKE '3,%'
OR additional_usergroups LIKE '%,3'
正如@CBroe指出的那样,MySQL似乎有一个FIND_IN_SET函数来处理这个问题:
WHERE FIND_IN_SET('3', additional_usergroups) > 0
但是,仍建议对RDBMS进行规范化。
答案 1 :(得分:-3)
SELECT id FROM users WHERE additional_usergroups LIKE '3%'
'%'表示抓住任何可能的东西,这就是它频繁用于搜索功能的原因。如果你删除它,你将只获取以3开头的数字,所以3,31,312等。