2017-10-21 105 views
0

我正在使用mysql FULLTEXT搜索,innodb表引擎。
搜索词:tom如何使用MySQL FULLTEXT使用OR在多个字段中使用WHERE搜索?

SELECT * FROM content WHERE MATCH(title) AGAINST('tom' IN BOOLEAN MODE) AND is_enabled = 1 AND category = 100 OR category = 200 ORDER BY seeders DESC LIMIT 0, 30 

上面的查询给550记录,预计记录6

,但如果我搜索每个类别中分别。 在category 100

SELECT * FROM content WHERE MATCH(title) AGAINST('tom' IN BOOLEAN MODE) AND is_enabled = 1 AND category = 100 ORDER BY seeders DESC LIMIT 0, 30 

搜索给人5记录

和搜索在category 200

SELECT * FROM content WHERE MATCH(title) AGAINST('tom' IN BOOLEAN MODE) AND is_enabled = 1 AND category = 200 ORDER BY seeders DESC LIMIT 0, 30 

1记录。

所以我期待记录6,通过结合5 + 1,但我越来越550,即使是那些没有字tom在其中的记录。


的另一个问题,是 搜索在categorysub_category在相同的查询词tom

SELECT * FROM content WHERE MATCH(title) AGAINST('tom' IN BOOLEAN MODE) AND is_enabled = 1 AND sub_category = 101 OR category = 200 ORDER BY seeders DESC LIMIT 0, 30 

550记录。预计记录是6

所以我该如何解决这个问题?

回答

0

我已找到解决方案。查询应该是

SELECT * FROM content WHERE MATCH(title) AGAINST('tom' IN BOOLEAN MODE) AND is_enabled = 1 AND (category = 100 OR category = 200) ORDER BY seeders DESC LIMIT 0, 30 

通知,OR运营商在括号

和第二查询问题,使用两个字段搜索或成为

SELECT * FROM content WHERE MATCH(title) AGAINST('tom' IN BOOLEAN MODE) AND is_enabled = 1 AND (sub_category = 101 OR category = 200) ORDER BY seeders DESC LIMIT 0, 30 
+1

嗯,这是有点明显,你必须将适当的分组应用于您的条件。由于修复是如此微不足道,为什么不考虑完全删除这个问题?在实际的全文检索中提到它对未来的读者没有任何价值,因为它主要处理构建适当的SQL查询的能力。 – andrews

相关问题