2015-12-02 64 views
1

返回唯一记录我在Rails的3.2轻度复杂的ActiveRecord查询/ Postgres的返回被相关最相关所有文件用户已收藏在过去的文件。在此的ActiveRecord查询

的问题是,尽管指定uniq我的查询返回不同的文件记录:

Document.joins("INNER JOIN related_documents ON 
       documents.docid = related_documents.docid_id") 
     .select("documents.*, related_documents.relevance_score") 
     .where("related_documents.document_id IN (?)",  
        some_user.favorited_documents) 
     .order("related_documents.relevance_score DESC") 
     .uniq 
     .limit(10) 

我用一个RelatedDocument连接表,由related_document.relevance_score我用命令的排名每个关系查询结果在采样前10位。(见this question的架构描述。)

问题是由于我的select("documents.*, related_documents.relevance_score"),同一个文件r ecord多次返回不同relevance_scores被认为是独特的结果。 (即,如果该文件是多个收费文件的相关文件)。

无论related_document.relevance_score如何返回唯一Documents

我试图将select拆分为两个单独的选择,并且在查询中更改了uniq的位置,但没有成功。

不幸的是我必须select("related_documents.relevance_score"),以便按这个字段排序结果。

谢谢!

更新 - 解

由于Jethroo下面GROUP BY是需要另外,给我后续工作查询:

Document.joins("INNER JOIN related_documents ON 
       documents.docid = related_documents.docid_id") 
     .select("documents.*, max(related_documents.relevance_score)") 
     .where("related_documents.document_id IN (?)",  
        some_user.favorited_documents) 
     .order("related_documents.relevance_score DESC") 
     .group("documents.id") 
     .uniq 
     .limit(10) 

回答