我正在使用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
的记录。
另一个问题是
在同一查询中搜索category
或sub_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 :(得分: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