2014-01-17 48 views
3

我现在有一个查询,确保了一些术语不是在titledescription领域,像这样:MySQL的不喜欢的是有没有更好的办法做到这一点

" ... title NOT LIKE '%word1% AND description NOT LIKE '%word1%' AND title NOT LIKE '%word2%' AND description NOT LIKE '%$word2%' ..." 

有没有更好的办法这样做的原因是单词数量将会增长,并且查看查询时效果不佳。

+0

恐怕对于这个要求你没有很多其他的选择。在这种情况下看到'LIKE'的一些好的替代方案会很有趣 –

+0

你是什么意思_“看起来效率不高”_? –

+0

对于每个关键字,只是看起来不太合适。我希望可能会有类似...不像(关键字1,关键字2,关键字3),我只是缺少语法 – bertster

回答

0

对于不同的字,你将不得不使用的条件,但是你可以缩短UR查询与和的帮助下获得性能如下查询:
and (instr(title,'word1')<=0 and instr(description,'word1')<=0) and (instr(title,'word2')<=0 and instr(description,'word2')<=0)

+0

你读过这个问题吗? –

+0

对不起,您以前的帖子。我编辑了我的回复。之前我给了一个简短的回复,但我的意思是这个。 – Krishna

+1

尽管这不是我的downvote,你的帖子仍然不正确。在这种情况下,您__不能使用'CONCAT()'。如果你与'“foo”匹配,你的'title'是'aaaaf','description'是'oobbbb',那么查询将会在它们应该被包含在结果中时被过滤掉。 –

0

你可以试试这个,

(title NOT REGEXP 'word1|word2|word3') AND (description NOT REGEXP 'word1|word2|word3'); 

编号:http://dev.mysql.com/doc/refman/5.1/en/regexp.html

+0

REGEXP是一个杀手,只有在需要110%的时候才使用它。使用[BENCHMARK]进行测试(http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_benchmark) http://sqlfiddle.com/#!2/d41d8/29461: 使用LIKE:** 2232ms ** 使用REGEXP:** 14099ms ** – aconrad

+0

是的,刚刚尝试过,效率低得多 - 尽管它确实有效。谢谢你的想法 – bertster

相关问题