0

所以,我有一种情况,我希望没有 MATCH 和 MATCH 所有项目都能得到相同的结果,但得到的结果却不一致。

这些是数据库中的当前类型:

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

是我还是应该两个查询都返回相同的确切计数?

编辑:

经过一番挖掘,我发现我的一种“类型”中有连字符。

所以像:

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

将导致“type1”或“type2”,但类似于:

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

将是“type1”或“type”和“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 子句中没有“或”。

  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 回答