0

そのため、MATCH アイテムと MATCH all アイテムの両方で同じ結果が得られるようにしたい状況がありますが、一貫性のない結果が得られています。

DB の現在のタイプは次のとおりです。

mysql> select the_type from data GROUP BY the_type;
+-----------------+
| the_type        |
+-----------------+
| type1           |
| type2           |
+-----------------+

基準を指定しない場合:

mysql> select COUNT(*) as num from data;
+------+
| num  |
+------+
| 2131 |
+------+

すべてのタイプの MATCH を使用:

mysql> select COUNT(*) as num from data WHERE MATCH('(@the_type type1|type2)');
+------+
| num  |
+------+
|  430 |
+------+

それは私ですか、それとも両方のクエリが同じ正確な数を返す必要がありますか?

編集:

掘り下げた後、「タイプ」の1つにハイフンが含まれていることがわかりました。

次のようなものです:

MATCH('(@the_type type1|type2)')

「type1」または「type2」になりますが、次のようになります。

MATCH('(@the_type type1|type-two)')

「type1」OR「type」AND「two」になります。

今、私は型を INT フィールドに変換しようとしましたが、やろうとしていました:

mysql> select COUNT(*) as num from data WHERE type = 1 OR type = 2;

しかし、私はエラーが発生します:

ERROR 1064 (42000): sphinxql: syntax error, unexpected OR, expecting $end near 'OR type = 2'

何か案は?

4

1 に答える 1

1

sphinx の WHERE 句には「OR」はありません。

  1. でもできるWHERE type IN (1,2);

  2. 本当に OR を使用したい場合は、SELECT 部分に入れることができます (IF 関数も参照してください)。

    select COUNT(*) as num, (type = 1 OR type = 2) AS filter from data WHERE filter =1;
    
  3. MATCH('(@the_type type1|"type-two")')ハイフンでつながれた (または複数の単語) バージョンを一緒に保つこともできます。

于 2015-01-07T10:41:05.070 に答える