我在Rails 3.2 / Postgres中有一个稍微复杂的ActiveRecord查询,它将相关和最相关的文档返回到所有文档 a用户过去曾受到青睐。
问题在于,尽管指定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")
,使用不同relevance_scores
多次返回的同一文档记录被视为唯一结果。 (即如果该文件是多个被收藏文件的related_document。)
无论Documents
如何,我如何归还唯一related_document.relevance_score
我尝试将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)
答案 0 :(得分:1)
您是否尝试按documents.docid
分组http://guides.rubyonrails.org/active_record_querying.html#group?