搜索php + mysql关闭词?

时间:2013-02-27 20:57:29

标签: php mysql search tags

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

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

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 他写了解决方案

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

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

请参阅小提琴here

答案 1 :(得分:0)

你也可以使用MySQL的REGEXP代替LIKE,使用单词boundary修饰符来匹配整个单词。您的查询看起来像这样:

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

如果您需要,还可以让您在单个查询中查找与任何(或全部)给定标记集匹配的行:

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

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

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

此处有更多信息:http://dev.mysql.com/doc/refman/5.1/en/regexp.html