0

我有一个 MySQL 表列量规,其中包含字符串值 '61,80,112,256'。所以我尝试执行该查询:

select * from table where 256 in (rubrics) and 61 in (rubrics)

并且没有结果返回。有什么建议么?

4

4 回答 4

4

由于您的rubrics列是逗号分隔的列表,因此IN运算符将不起作用。

MySQL 确实有一个可以在字符串列表中查找值的函数,因此您应该能够使用FIND_IN_SET()

select *
from yourtable
where find_in_set(61, rubrics)
  or find_in_set(256, rubrics)

请参阅带有演示的 SQL Fiddle

于 2013-02-11T11:05:40.647 回答
1

类似的东西WHERE rubrics LIKE '%,256,%' OR rubrics LIKE '256,%' OR rubrics LIKE '%,256'。使用括号您也可以过滤61,但结果查询会变得混乱。你最好规范化你的数据,这样你就可以使用子查询和使用键的连接(真正的交易)。

(另请参阅bluefeet的答案,这FIND_IN_SET是一种更好的方法)

于 2013-02-11T11:04:07.200 回答
0

试试这个

select * from table where rubrics like '%'+'256,'+'%' and rubrics like '%'+'61,'+'%'
于 2013-02-11T11:03:39.407 回答
0

IN运算符不适用于字符串

使用正确的子字符串匹配运算符,例如LIKELOCATE

一个建议 - 更新您的 rubics 列以,字符开头和结尾,这将使您的LOCATE(",62,", rubics)操作明确,而不是LOCATE("62", rubics)匹配 622 和 262 以及其他组合。,62,如果您的 rubics 具有价值,则定位将失败,因为62,blah,foo,bar它不是以,

于 2013-02-11T11:08:26.270 回答