-2

首先对不起我的英语...

我在数据库上有一个标签字段,我正在搜索

SELECT * FROM table WHERE tags LIKE '%$keyword%' and tags LIKE '%$keyword%'

我按空格分隔标签,例如;

 america  england  france 

我想向您展示我的表格结构

id | title | tags

1    title1  america france
2    title2  american english
3    title3  england  french

例如,当我想搜索“美国”时

结果是 title1 和 title2 因为 美国美国标签看起来像同一个词..

我怎样才能使它们独一无二?当我搜索美国时,结果应该只有 title1 ......

感谢您的帮助,希望您能理解我的问题。祝您有美好的一天

编辑 :

感谢Akam,他写了解决方案

4

2 回答 2

1

你可以使用这样的东西:

SELECT *
FROM tbl
WHERE CONCAT(' ', tags, ' ') LIKE CONCAT('% ', 'america', ' %')

在此处查看小提琴。

于 2013-02-27T21:01:12.280 回答
0

您还可以使用 MySQL 的 REGEXP 而不是 LIKE 使用单词边界修饰符来仅匹配整个单词。您的查询将如下所示:

SELECT * FROM table WHERE tags REGEXP '[[:<:]]$keyword[[:>:]]';

如果您需要,这还有一个额外的好处,就是让您可以在单个查询中查找与给定标签集的任何(或全部)匹配的行:

SELECT * FROM table WHERE tags REGEXP '[[:<:]]$keyword_one[[:>:]]|[[:<:]]$keyword_two[[:>:]]'

请注意 REGEXP 条件中两个表达式之间的管道|字符,这意味着它将匹配至少匹配其中一个标记的任何记录。

我没有亲自测试过这种方法的性能,但在其他 StackOverflow 帖子中读到它几乎等同于开头LIKE带有%通配符的 a(因为这种类型的查询会导致 MySQL 不使用索引)。所以我想这对你来说是最好的选择。

更多信息在这里:http ://dev.mysql.com/doc/refman/5.1/en/regexp.html

于 2013-02-27T22:09:51.817 回答