Sql 如何按多关系和计数排序

Sql 如何按多关系和计数排序,sql,ruby-on-rails,ruby-on-rails-3,Sql,Ruby On Rails,Ruby On Rails 3,我正在使用Rails 3.2.8进行开发,希望通过多个关系的总和来订购一个模型 有一个文档模型,它有许多子目录和子目录,它们都是关系模型(不是模型关系,一个名为“关系”的模型) doc.rb class Instance < ActiveRecord::Base belongs_to :obj, :class_name => 'Denotation' has_many :subrels, :class_name => 'Relation', :as => :sub

我正在使用Rails 3.2.8进行开发,希望通过多个关系的总和来订购一个模型

有一个文档模型,它有许多子目录和子目录,它们都是关系模型(不是模型关系,一个名为“关系”的模型)

doc.rb

class Instance < ActiveRecord::Base
  belongs_to :obj, :class_name => 'Denotation'
  has_many :subrels, :class_name => 'Relation', :as => :subj, :dependent => :destroy
  has_many :objrels, :class_name => 'Relation', :as => :obj, :dependent => :destroy
  .
  .
end
下面有个错误

PG::Error: ERROR:  missing FROM-clause entry for table "subcatrels"
LINE 1: SELECT  DISTINCT "docs".id, (count(subcatrels.id) + count(su...

: SELECT  DISTINCT "docs".id, (count(subcatrels.id) + count(subinsrels.id)) AS alias_0 FROM "docs" LEFT OUTER JOIN "denotations" ON "denotations"."doc_id" = "docs"."id" LEFT OUTER JOIN "relations" ON "relations"."subj_id" = "denotations"."id" AND "relations"."subj_type" = 'Denotation' LEFT OUTER JOIN "denotations" "denotations_docs_join" ON "denotations_docs_join"."doc_id" = "docs"."id" LEFT OUTER JOIN "instances" ON "instances"."obj_id" = "denotations_docs_join"."id" LEFT OUTER JOIN "relations" "subinsrels_docs" ON "subinsrels_docs"."subj_id" = "instances"."id" AND "subinsrels_docs"."subj_type" = 'Instance' WHERE "docs"."sourcedb" = 'PubMed' GROUP BY docs.id ORDER BY (count(subcatrels.id) + count(subinsrels.id)) DESC LIMIT 10 OFFSET 0
如何按计数子目录和子目录之和排序文档模型

下面是其他型号的源代码

外延.rb

class Instance < ActiveRecord::Base
  belongs_to :obj, :class_name => 'Denotation'
  has_many :subrels, :class_name => 'Relation', :as => :subj, :dependent => :destroy
  has_many :objrels, :class_name => 'Relation', :as => :obj, :dependent => :destroy
  .
  .
end
类表示“对象id”,:依赖=>:销毁
有许多:子关系,:类名称=>'Relation',:as=>:subc,:dependent=>:destroy
有多个:对象,:class\u name=>'Relation',:as=>:obj,:dependent=>:destroy
.
.
结束
instance.rb

class Instance < ActiveRecord::Base
  belongs_to :obj, :class_name => 'Denotation'
  has_many :subrels, :class_name => 'Relation', :as => :subj, :dependent => :destroy
  has_many :objrels, :class_name => 'Relation', :as => :obj, :dependent => :destroy
  .
  .
end
类实例'Denotation'
有许多:子关系,:类名称=>'Relation',:as=>:subc,:dependent=>:destroy
有多个:对象,:class\u name=>'Relation',:as=>:obj,:dependent=>:destroy
.
.
结束
关联图像
如果不是表名,则不能在
的WHERE
中请求
subinsrels.id

您可以添加Rails生成的完整查询吗?我在错误消息中添加了完整SQL查询。我想是的,并且必须编写原始SQL,如join、select和count。但是我不知道如何连接多个不总是具有相同关系的关系。@MAsuda抱歉,您的关联太复杂了,除非您对它们进行可视化(实体关系图),否则我无法深入了解。我添加了关联图像,请参考。
class Instance < ActiveRecord::Base
  belongs_to :obj, :class_name => 'Denotation'
  has_many :subrels, :class_name => 'Relation', :as => :subj, :dependent => :destroy
  has_many :objrels, :class_name => 'Relation', :as => :obj, :dependent => :destroy
  .
  .
end