MySQL WHERE LIKE子串

时间:2017-08-22 13:43:37

标签: php mysql

我意识到这个问题的标题可能尖叫“重复”,但我认为不是(至少如果是,我还没有看到它)。

我目前正在数据库中存储一个以逗号分隔的列表,例如1,3,5,6,13,但当SELECT id FROM users WHERE additional_usergroups LIKE '%3%' 313出现时。

有没有办法解决这个问题?

修改
我只希望 3 出现在结果中,抱歉这个问题太模糊了。

感谢。

2 个答案:

答案 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等。