mysql:如果列表字段中有一个数字,则选择行(即userIDs=";1,2,3";,从userIDs中1的表中选择*)

mysql:如果列表字段中有一个数字,则选择行(即userIDs=";1,2,3";,从userIDs中1的表中选择*),mysql,list,Mysql,List,我将ID列表存储在字段中(我所说的列表是指val1、val2、val3,…),我想从列表中字段包含valX的表中选择行 我原以为这样行得通,但显然不行:( currentMessages、removedMessages和readMessages是ID存储为列表的字段 我也试过了 SELECT * FROM userbulletins WHERE "25" IN(`currentMessages`) 两者都不返回任何内容(并且应该在我的测试数据库中返回1行) 知道我做错了什么吗?或者这是可

我将ID列表存储在字段中(我所说的列表是指
val1、val2、val3,…
),我想从列表中字段包含valX的表中选择行

我原以为这样行得通,但显然不行:(

currentMessages、removedMessages和readMessages是ID存储为列表的字段

我也试过了

SELECT * 
 FROM userbulletins 
WHERE "25" IN(`currentMessages`)
两者都不返回任何内容(并且应该在我的测试数据库中返回1行)

知道我做错了什么吗?或者这是可能的吗? 谢谢!

您可以为此目的使用:

SELECT * 
FROM userbulletins 
WHERE FIND_IN_SET("25", `currentMessages`)
同样值得考虑的是,如果在单个单元格中没有值列表,那么采用不同的设计是否会更好。我建议您阅读上的这篇维基百科文章。

您可以使用:

SELECT * 
FROM userbulletins 
WHERE FIND_IN_SET("25", `currentMessages`)

同样值得考虑的是,如果在单个单元格中没有值列表,那么采用不同的设计是否会更好。我建议您阅读上的这篇维基百科文章。

如果我理解正确,您有一个非规范化的表,
currentMessages
值可以是“val1,val2,val3,…”如果要查找其中25是其中一个值的行,请使用:


…但我真的建议您规范化数据,以简化查询。

如果我理解正确,您有一个非规范化的表,其中
currentMessages
值可以是“val1,val2,val3,…”,并且您希望查找其中25是这些值之一的行。如果是,请使用:


…但我真的建议您规范化数据以使查询更容易。

这是因为
中的
不是这样工作的。IN用于指定的值列表或子查询产生的列表

您必须将currentMessages表示为字符串,在这种情况下,
像“%|25 |%”这样的currentMessages或像“25 |%”这样的currentMessage或像“%|25”这样的currentMessage或currentMessage='25'
将无法正常工作,或者您必须有另一个表(或其中的几个表),以便

SELECT * FROM userbulletins
    WHERE 25 IN (SELECT * FROM `currentMessages` WHERE....)
--在这种情况下,我会建议消息(id、[标题、内容等]、状态{current、removed、read})


fakeEDIT:FIND_IN_SET的解决方案比我的同类选项好,但我仍然建议使用一个表。

这是因为
中的
不是那样工作的。IN用于指定的值列表或子查询产生的列表

您必须将currentMessages表示为字符串,在这种情况下,
像“%|25 |%”这样的currentMessages或像“25 |%”这样的currentMessage或像“%|25”这样的currentMessage或currentMessage='25'
将无法正常工作,或者您必须有另一个表(或其中的几个表),以便

SELECT * FROM userbulletins
    WHERE 25 IN (SELECT * FROM `currentMessages` WHERE....)
--在这种情况下,我会建议消息(id、[标题、内容等]、状态{current、removed、read})


fakeEDIT:FIND_IN_SET的解决方案比我喜欢的解决方案要好,但我仍然建议使用一个表。

我曾考虑过对其进行规范化,但该网站太大了,因此为此添加三个表似乎有些过火。这意味着比现在多了三个表;当前、删除和阅读消息各一个表s、 感谢您提供的解决方案!我曾考虑过对其进行规范化,但该网站太大了,因此为此添加三个表似乎有些过火。这意味着比现在多了三个表;每个表用于当前、删除和阅读邮件。感谢您提供的解决方案!