簡體   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