[英]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.