返回唯一記錄我在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)
謝謝jethroo,這導致我正確的解決方案。但我確實需要更改查詢的其他部分,以便能夠按所有選定的列進行分組。我已將工作查詢添加爲問題的更新。 –