我有一个名为“users”的数据库表,其中有一个名为“alerts”的列。警报列按以下顺序包含逗号分隔数据;
UserA -> 2314|1,2315|1,2316|3
UserB -> 4235|2,2315|1,2314|3
UserC -> 342|5,2314|1,2316|3
如果我分割逗号然后斜线分隔值,那么;
2314 = pid
1 = uid
如果我想搜索具有特定pid的所有用户,例如2314并列出它们或者将它们全部取出,我应该如何以及使用什么SQL查询?
答案 0 :(得分:1)
从表面上看,你会搜索',2314|'
,但问题是价值开头的数字不会有前面的逗号。
有3种方法可以解决它。
分别处理起始案例和中间案例:
select * from users
where alerts like '2314|%'
or alerts like '%,2314|%'
通过在值的开头添加逗号来组合案例,使其看起来像中间案例:
select * from users
where concat(',', alerts) like '%,2314|%'
使用正则表达式组合案例:
select * from users
where alerts rlike '(^|,)2314\|'
最好重新设计你的表来打破一个新的表来处理你在一个列中加入多对多的关系。