所以,我有一种情况,我想要没有MATCH和MATCH所有项目都能得到相同的结果,但结果却不尽相同。
这些是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 |
+------+
是我还是两个查询都返回相同的确切数?
编辑:
经过一番挖掘,我发现我的一个“类型”中有连字符。
类似于:
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'
有什么想法吗?
答案 0 :(得分:1)
没有' OR'在sphinx' es WHERE子句中。
但可以WHERE type IN (1,2);
如果真的想使用OR,可以把它放在SELECT部分,(另见IF函数)
select COUNT(*) as num, (type = 1 OR type = 2) AS filter from data WHERE filter =1;
也可以尝试MATCH('(@the_type type1|"type-two")')
将连字符(或多个单词)版本保持在一起。