2016-07-11 46 views
0

在MySQL中是否会允许搜索句子而不用考虑单词的顺序,例如:搜索Europe league匹配league Europe,与句子相同包含3个单词...等MySQL:搜索一个句子并忽略单词的顺序

我知道我可以在编程语言进行处理并生成MySQL查询像这样:

select p.title 
from post p 
where p.title = 'Europe league' or p.title = 'league Europe' 
order by case 
    when text = 'Europe league' then 1 
    when text = 'league Europe' then 2 
end 
limit 10; 

但有MySQL中的自我句柄这个问题? thx

回答

4

您正在寻找全文搜索。阅读上the docs,这样你就可以使用以下类型的查询:

SELECT p.title 
FROM post p 
WHERE MATCH (p.title) AGAINST ("+europe +league" IN BOOLEAN MODE) 
LIMIT 10 
+0

您的SQL语法错误;检查对应于你的MySQL服务器版本的手册,在'IN BOOLEAN MODE'附近使用正确的语法@Jethro – mwafi

+0

对不起,修正了错字。在BOOLEAN MODE之前删除逗号。 – 1sloc

+0

看来它需要MyISAM提供全文索引支持:(找不到与列列表匹配的FULLTEXT索引) – mwafi

-1

显然迭代次数会让人望而却步当您添加更多的话;对此的一个解决方案是使用instr函数(http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_instr)。这样,您可以按照以下方式进行操作:

select p.title 
from post p 
where instr('Europe',p.title)>0 
AND instr('League ',p.title)>0 
AND instr('Match',p.title)>0 
limit 10; 
+0

这不是一个可扩展的解决方案,是吗? – 1sloc