Mysql 查找sql列中具有特定数字/字符串的所有用户

Mysql 查找sql列中具有特定数字/字符串的所有用户,mysql,database,Mysql,Database,我有一个名为“users”的db表,它有一个名为“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查询以及使用什么SQL查

我有一个名为“users”的db表,它有一个名为“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查询以及使用什么SQL查询?

从表面上看,您可以搜索
',2314 |'
,但问题是值开头的数字前面没有逗号

有三种方法可以解决这个问题

分别处理起始箱和中间箱:

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


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

您可以尝试使用
WHERE字段,如“$value”%”或字段“%”,$value |%'
但最好是规范化您的表。您似乎已经在该表结构中陷入了一个相当糟糕的境地。如果您可以更改应该优先考虑的结构,否则您将无法利用关系数据库。您可以尝试@Prix所说的方法,但从长远来看,如果此表被加载,您将面临一些可怕的性能问题。我建议重新组织您的模式,并使用可以正确索引和排序的适当列。