返回唯一记录我在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,这导致我正确的解决方案。但我确实需要更改查询的其他部分,以便能够按所有选定的列进行分组。我已将工作查询添加为问题的更新。 –