gpt4 book ai didi

sql - 在 Rails 中按虚拟属性排序

转载 作者:太空宇宙 更新时间:2023-11-03 16:29:54 24 4
gpt4 key购买 nike

我正在使用 Rails 3.2.8 进行开发我想将此排序转换为 Rails 范围。

class Doc < ActiveRecord::Base
has_many :denotations

def same_sourceid_denotations_count
denotation_doc_ids = Doc.where(:sourceid => self.sourceid).collect{|doc| doc.id}
Denotation.select('doc_id').where('doc_id IN (?)', denotation_doc_ids).size
end
end

class Denotation < ActiveRecord::Base
belongs_to :doc
end

ans排序如下

 @docs = docs.sort{|a, b| b.same_sourceid_relations_count <=> a.same_sourceid_relations_count}

我在下面写了范围,但不起作用。

scope :same_sourceid_docs_denotations_count
select('docs.*, docs.sourceid = docs.sourceid AS same_sourceid_doc_ids, COUNT(denotations.doc_id IN (same_sourceid_doc_ids)) AS same_sourceid_docs_denotations_count')
.group('docs.id')
.order('same_sourceid_docs_denotations_count DESC')

出现错误。

PG::Error: ERROR:  missing FROM-clause entry for table "denotations"
LINE 1: ...d = docs.sourceid AS same_sourceid_doc_ids, COUNT(denotation...
^
: SELECT docs.*, docs.sourceid = docs.sourceid AS same_sourceid_doc_ids, COUNT(denotations.doc_id IN (same_sourceid_doc_ids)) AS same_sourceid_docs_denotations_count FROM "docs" WHERE "docs"."sourcedb" = 'PubMed' GROUP BY docs.id ORDER BY same_sourceid_docs_denotations_count DESC LIMIT 10 OFFSET 0
.group('docs.id')
.order('same_sourceid_docs_denotations_count DESC')

下面是这个排序步骤

  • 查找所有具有相同 sourceid 的文档并获取这些 id。
  • 计算上面 ids 中有 doc_id 的外延。
  • 按上面的符号计数对文档进行排序。

    <文档编号:1,源代码:111>
    <文档编号:2,来源编号:111>

    <表示 id: 2, doc_id: 2 >
    <表示 id: 3, doc_id: 2 >
    => 与 sourceid 111 相关的外延计数应为 3

    <文档编号:3,来源编号:222>
    <标注 id: 4, doc_id: 3 >
    => 与 sourceid 222 相关的外延计数应为 1

有什么想法吗?

最佳答案

看起来您缺少一个 JOIN 子句来引入 denotations 表。尝试这样的事情(注意使用 joins(...) ):

scope :same_sourceid_docs_denotations_count,
select("docs.*, count(denotations.id) AS denotations_count")
.joins("INNER JOIN denotations ON denotations.sourceid = docs.sourceid")
.group("docs.id")
.order("denotations_count DESC")

ActiveRecord Query Interface指南还有一些关于如何使用 joins(...) 的详细信息。

关于sql - 在 Rails 中按虚拟属性排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17838189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com