繁体   English   中英

如何使用OR在多个字段中与WHERE一起使用mysql FULLTEXT Search?

[英]How to use mysql FULLTEXT Search with WHERE in multiple fields using OR?

我正在使用mysql FULLTEXT Search, 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记录。

所以我期望通过结合5 + 1来获得记录6 ,但是我得到了550,即使那些没有单词tom记录也是如此。


另一个问题是,在同一查询中的categorysub_category 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

那么我该如何解决呢?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM