2017-10-21 141 views
0

我正在使用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在其中的記錄。


的另一個問題,是 搜索在categorysub_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

所以我該如何解決這個問題?

回答

0

我已找到解決方案。查詢應該是

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 
+1

嗯,這是有點明顯,你必須將適當的分組應用於您的條件。由於修復是如此微不足道,爲什麼不考慮完全刪除這個問題?在實際的全文檢索中提到它對未來的讀者沒有任何價值,因爲它主要處理構建適當的SQL查詢的能力。 – andrews

相關問題