2017-10-21 9 views
0

mysql FULLTEXT Search、innodbテーブルエンジンを使用しています。
検索用語:クエリ上記tommysql 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 

で検索すると、

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 

category 2005記録

と検索を与えるには、 1レコードを提供します。

私は5 + 1を組み合わせることによって、レコード6を期待していますが、単語がtomでないレコードであっても、550を取得しています。


もう一つの問題は、単語tomについて同じクエリでcategoryまたはsub_categoryで検索

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

関連する問題