如何使用MySQL FULLTEXT使用OR在多个字段中使用WHERE搜索?
问题描述:
我正在使用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
在其中的记录。
的另一个问题,是 搜索在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
所以我该如何解决这个问题?
答
我已找到解决方案。查询应该是
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
嗯,这是有点明显,你必须将适当的分组应用于您的条件。由于修复是如此微不足道,为什么不考虑完全删除这个问题?在实际的全文检索中提到它对未来的读者没有任何价值,因为它主要处理构建适当的SQL查询的能力。 – andrews