2015-12-02 63 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) 

回答