2017-06-13 34 views
0

我試圖sphinxql支持'不在'之間嗎?

SELECT count(*) as count FROM rt_item WHERE MATCH('') AND sale between 1 and 2; 

,並得到了許多行。 但獅身人面像抱怨

ERROR 1064 (42000): sphinxql: syntax error, unexpected BETWEEN, expecting IN near 'between 1 and 2' 

,當我試圖

SELECT count(*) as count FROM rt_item WHERE MATCH('') AND sale not between 1 and 2; 

我搜索獅身人面像正式文件,它說:

WHERE子句。該子句將映射到全文查詢和過濾器。比較運算符(=,!=,<,>,< =,> =),IN,AND,NOT和BETWEEN都支持並直接映射到過濾器。 OR尚未得到支持,但將在未來支持。 MATCH('查詢')被支持並映射到全文查詢。

但它沒有關於NOT BETWEEN的例子。 有人可以告訴我,sphinxql是否支持NOT BETWEEN?如果支持,什麼是正確的語法?

+0

'sale'的類型是什麼? – hank

+0

銷售僅僅是一個示例db列。 – chariothy

回答

1

不,不是NOT BETWEEN。有一個NOT IN()運營商,這可能會在這種特定情況下幫助

SELECT count(*) as count FROM rt_item WHERE MATCH('') AND sale not in (1,2); 

(變繁瑣長範圍)

這有點令人費解,但可以做

SELECT count(*) as count,sale>=1 AND sale<=2 AS f FROM rt_item WHERE f=0 

創建虛擬屬性模仿一個'之間',然後檢查是否爲false。

可能還會發現

SELECT count(*) as count,sale < 1 OR sale > 2 AS f FROM rt_item WHERE f=1 

清晰。反轉邏輯。

(空匹配()什麼也不做,可以省略)

+0

謝謝!令我困惑的是有些操作符在mysql中支持,但在sphinx中不支持,例如NOT BETWEEN和IN中帶有float列。所以很難寫出一個通用的查詢方法。 – chariothy

+0

嗯,是的,MySQL和獅身人面像是非常不同的東西。他們有非常不同的能力。通常需要單獨的功能。 – barryhunter