我正在开发一个与其他人一起开始的项目。在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%
此外,我还需要搜索多个值,例如1
,7
和3
答案 0 :(得分:3)
示例:强>
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。如果第一个参数包含逗号(“,”)字符,则此函数无法正常工作。
(突出显示已添加)