搜索逗号分隔的mysql列

时间:2015-07-05 18:53:31

标签: mysql sql one-to-many

我正在开发一个与其他人一起开始的项目。在db中,不是使用单独的表,开发人员选择使用逗号分隔的表保存单个表上的1 to many关系。表结构就像这样

CREATE TABLE pages(
  pageid INT(6) AUTO_INCREMENT PRIMARY KEY,
  newsid INT(6),
  pages  VARCHAR(30)
);    

如何从1列中搜索值pages。我已经确定了可能出现的一些条件,但无法为其创建解决方案。

如果我正在搜索1,则应处理以下模式

1,  match
11  shouldn't match
11, shouldn't match
,1, match
,1  match
1   match
21  shouldn't match
21, shouldn't match 

我一直在考虑这个问题,但没有解决方案。我不认为这里可以使用正常%LIKE%

sqlfiddle

上的示例sql

此外,我还需要搜索多个值,例如173

1 个答案:

答案 0 :(得分:3)

使用 FIND_IN_SET()

示例:

SELECT * FROM pages WHERE FIND_IN_SET('1', pages) 

来自文档:

  

<强> FIND_IN_SET(STR,strlist)

     

如果字符串str位于由N个子字符串组成的字符串列表strlist中,则返回1到N范围内的值。 字符串列表是由以“,”字符分隔的子字符串组成的字符串。如果第一个参数是常量字符串而第二个参数是SET类型的列,则FIND_IN_SET()函数被优化为使用位算术。 如果str不在strlist中,或者strlist是空字符串,则返回0。如果任一参数为NULL,则返回NULL。如果第一个参数包含逗号(“,”)字符,则此函数无法正常工作。

(突出显示已添加)