我的数据库中的列中有逗号分隔标记列表。我使用一个简单的通配符来拉出与我正在搜索的标签匹配的项目。但是,我发现一些标签作为其他标签的标题的一部分包含在内,并且它们也被返回。例如,可能会返回搜索这些行的搜索:
hunting, fishing, outdoors <-- Should be returned
sporting goods, hunting <-- Should be returned
bargain hunting, sale <-- Should NOT be returned
bullets, guns, hunting <-- Should be returned
目前我正在使用:
WHERE column LIKE '%hunting%'
如何使用这些逗号分隔列表更好地完成此工作,我该怎么做。另外,请记住,某些行可能只有一个标记,因此根本没有逗号。感谢。
答案 0 :(得分:1)
将RLIKE
与相应的正则表达式一起使用:
WHERE column RLIKE '(^|, )hunting(,|$)'
使用问题的示例输入正确查看SQLFiddle live demo此条件是否正常工作。
答案 1 :(得分:1)
不使用正则表达式:
WHERE column LIKE '%, hunting'
OR column LIKE '%, hunting,%'
OR column LIKE 'hunting, %'
此处的解决方案是规范化您的表格。
CREATE TABLE products
(`id` int, `name` varchar(4));
INSERT INTO products
(`id`, `name`)
VALUES
(1, 'gun'),
(2, 'fish');
CREATE TABLE keywords
(`id` int, `keyword` varchar(15));
INSERT INTO keywords
(`id`, `keyword`)
VALUES
(1, 'hunting'),
(2, 'fishing'),
(3, 'outdoors'),
(4, 'sporting goods'),
(5, 'bargain hunting'),
(6, 'sale'),
(7, 'bullets'),
(8, 'guns');
CREATE TABLE productKeywords
(`productId` int, `keywordId` int);
INSERT INTO productKeywords
(`productId`, `keywordId`)
VALUES
(1, 1),
(1, 3),
(1, 4),
(2, 2),
(2, 5);
答案 2 :(得分:1)
select * from Table1
where find_in_set('hunting',`text`)
or find_in_set(' hunting',`text`)
<强> SAMPLE FIDDLE 强>