如何使用OR在多个字段中使用WHERE FULLTEXT搜索WHERE?

时间:2017-10-21 05:39:02

标签: mysql full-text-search

我正在使用mysql FULLTEXT搜索,innodb表引擎 搜索字词:tom

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

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

1 个答案:

答案 0 :(得分: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运算符在括号中

和第二个查询问题,使用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