Php MySQL在哪里像子字符串

Php MySQL在哪里像子字符串,php,mysql,Php,Mysql,我意识到这个问题的标题可能会尖叫“重复”,但我不认为它是重复的(至少如果是,我还没有看到它) 我目前正在数据库中存储一个以逗号分隔的列表,如1,3,5,6,13,但当我从用户中选择id时,会同时显示其他用户组,如“%3%”,3和13 有办法解决这个问题吗 编辑 我只想在结果中显示3,抱歉,这个问题太模糊了 谢谢 SELECT id FROM users WHERE additional_usergroups LIKE '3%' “%”意味着可以抓取任何东西,这就是为什么它经常用于搜索功能的原因

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

我目前正在数据库中存储一个以逗号分隔的列表,如
1,3,5,6,13
,但当我从用户中选择id时,会同时显示其他用户组,如“%3%”,
3
13

有办法解决这个问题吗

编辑
我只想在结果中显示3,抱歉,这个问题太模糊了

谢谢

SELECT id FROM users WHERE additional_usergroups LIKE '3%'
“%”意味着可以抓取任何东西,这就是为什么它经常用于搜索功能的原因。如果你删除它,你只会抓取以3开头的数字,所以3,31312等等


“%”意味着可以抓取任何东西,这就是为什么它经常用于搜索功能的原因。如果您删除它,您将只获取以3开头的数字,因此3,31312等等。

这就是为什么RDBMS有规范化准则。我鼓励您阅读有关规范化以及为什么数据库中的值应该是单数的内容

但是,解决这一问题的一种方法是只包括3种可能性:

additional_usergroups LIKE '3' 
OR additional_usergroups LIKE '%,3,%'
OR additional_usergroups LIKE '3,%'
OR additional_usergroups LIKE '%,3'
正如@CBroe所指出的,MySQL似乎有一个功能来处理这个问题:

WHERE FIND_IN_SET('3', additional_usergroups) > 0

但是,仍然建议对RDBMS进行规范化。

这就是为什么RDBMS有规范化指南的原因。我鼓励您阅读有关规范化以及为什么数据库中的值应该是单数的内容

但是,解决这一问题的一种方法是只包括3种可能性:

additional_usergroups LIKE '3' 
OR additional_usergroups LIKE '%,3,%'
OR additional_usergroups LIKE '3,%'
OR additional_usergroups LIKE '%,3'
正如@CBroe所指出的,MySQL似乎有一个功能来处理这个问题:

WHERE FIND_IN_SET('3', additional_usergroups) > 0

但是,仍然建议对RDBMS进行规范化。

是-正确规范化数据库。(或者使用FIND_IN_SET,如果你想不惜任何代价保持你现在的混乱状态…)你想要结果中的精确值3吗?是的,我只想显示3,@a_Yes-正确地规范化你的数据库。(或者使用FIND_IN_SET,如果你想不惜任何代价保持你现在的混乱状态…)你想要结果中的精确值3吗?是的,我只想要3出现,@a_aThanks@Cody,但这对我来说仍然没有用,因为如果我有
31
,它会拾取这个值,我也不会想要它。如果你只想要'3',那么就把这两个“%”都去掉。像'3'@Cody,你不会找到任何东西,因为字段的值是“3,1,2,31,4”,而不仅仅是“3”。SQL会拉整行,不管对不对?我不明白你是如何得到3,13的,你应该使用一个字符串拆分,并将逗号分隔的值放入一个临时表中,这将解决你的问题谢谢@Cody,但这对我来说仍然没有用处,因为如果我有
31
,它将拾取该值,我不会想要它然后清除这两个“%”。像'3'@Cody,你不会找到任何东西,因为字段的值是“3,1,2,31,4”,而不仅仅是“3”。SQL会拉整行,不管对不对?我不明白你是怎么得到3,13的,你应该用一个字符串分割,把逗号分隔的值放在一个临时表中,这样就能解决你的问题了