2014-12-04 37 views
1

我有一个查询,我想运行相同的思维狮身人面像,但我有问题HAVING子句。相关的代码如下:正确的语法,以思维与狮身人面像HAVING

#technology_index.rb 
    has taggings.tag_id, :as => :tag_id 
    has id, :as => :technology_id 

#technology.rb 
    search(params[:query], 
     with: { tag_id: params[:filter].values.flatten }, 
     group_by: :technology_id, 
     having: "COUNT(`technology_id`)=#{params[:filter].size}" 
    ) 

这引发了我下面的错误(错误信息的新线是我的):

sphinxql: syntax error, unexpected IDENT, expecting '*' near '`technology_id`)=1 LIMIT 0, 20; 
SHOW META' - SELECT *, groupby() AS sphinx_internal_group, id AS sphinx_document_id, 
count(DISTINCT sphinx_document_id) AS sphinx_internal_count 
FROM `technology_core` WHERE MATCH('fibrosis') AND `tag_id` IN (2) 
AND `sphinx_deleted` = 0 GROUP BY `technology_id` HAVING COUNT(`technology_id`)=1 
LIMIT 0, 20; SHOW META 

问题是与having:条款,因为如果我删除它,至少查询起作用。 自从2.2.1 beta HAVING is supported(使用2.2.6),the same for TS 3.1(使用3.1.2)推测。我在文档中找不到任何信息about use of HAVING,但是如果我尝试类似having: "COUNT(*)>1"的作品,所以我想,我只是错误地调用它。什么应该是使用TS的having:的正确方法?

回答

0

sphinx似乎仍然不支持类似having: "COUNT('technology_id')=#{params[:filter].size}"的东西。
无论如何,我的查询与having: "COUNT(*)=#{params[:filter].size}一起工作,因为我是由technology_id分组。

+0

只是为了清楚它的COUNT(列)不是由sphinx支持的 - 它实际上并没有真正的NULL概念。但COUNT(*)有效。 (即,而不是HAVING的问题) – barryhunter 2014-12-05 13:51:58