0

我有一个名为“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 查询?

4

1 回答 1

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\|'

最好重新设计您的表格以拆分一个新表格来处理您硬塞到一列中的多对多关系。

于 2013-10-07T23:39:45.300 回答