繁体   English   中英

通过关联查询订单记录数

[英]Query to Order Number of Records through Association

我有两个模型

class Location < ActiveRecord::Base
  has_many :people, :as => :person
end

class People < ActiveRecord::Base
  belongs_to :person, :polymorphic => true
end

我想运行一个Location where子句。 然后,我想对查询进行排序,以便与之相关联的人员最多的位置是第一个,然后以降序排列。

Location.where(place: "Waffle House")#Some query attached to this, but what do I write?

如何编写此查询? 可能吗?

已解决:解决了该问题。 尽管它很hacky,但直到我可以创建SQL语句之前,它一直有效。 基本上遍历选定的位置,对每个位置的人数进行计数,并添加具有人数计数的虚拟属性,并对哈希数组进行排序。

看一下Active Record Guide中有关条件连接的部分,应该为您指明正确的方向。

http://guides.rubyonrails.org/active_record_querying.html#specifying-conditions-on-the-joined-tables

尝试这个:

Location.joins("(
  SELECT person_id location_id, COUNT(1) people_count
  FROM people
  WHERE person_type = 'Location'
  GROUP BY person_id
  ) a ON a.location_id = locations.id"
).order("a.people_count DESC")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM