[英]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
记录也是如此。
另一个问题是,在同一查询中的category
或sub_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.