我在Rails中轻度复杂的ActiveRecord查询3.2 / Postgres的是那些回报文档相关和最相关的到的所有文件,用户在过去收藏。
问题是,尽管指定了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前订购查询结果(参见这个问题对于模式描述。)
问题在于,因为I 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)
你必须试图将其组documents.docid
看到http://guides.rubyonrails.org/active_record_querying.html#group?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句