我有三个表 vendors、comments、works 表。 我必须按否对所有供应商进行排序。的 (admin_verified : true) 评论。如果 'n' 个供应商的评论数相同,则按作品数排序。
我写了一个事件记录查询,但如果供应商至少有一个经过验证的评论,它只需要供应商。 查询:
Vendor.
joins(:reviews).
where("reviews.verified"=>true).
group("reviews.vendor_id").
order("count(reviews.vendor_id)")
此查询仅在两个表之间进行。 如何编写 Rails 事件记录查询以根据上述顺序对供应商进行排序?
# vendor.rb
has_many :reviews
has_many :works
# review.rb (table_fields: 'verified','comment',... and so on)
belongs_to :vendor
# work.rb (table_fields: 'work_title','work_description',... and so on)
belongs_to :vendor
最佳答案
你可以尝试这样的事情:
vendors = Vendor.joins('LEFT JOIN (SELECT id, vendor_id FROM reviews WHERE reviews.verified = 1) as r ON r.vendor_id=vendors.id')
.joins('LEFT JOIN works ON works.vendor_id=vendors.id')
.group('vendors.id')
.select('vendors.* , COUNT(DISTINCT r.id) AS no_reviews, COUNT(DISTINCT works.id) AS no_works')
.order('no_reviews DESC, no_works DESC')
在这种情况下,您还可以从供应商对象访问计数,例如:vendors.first.no_reviews
关于mysql - 如何排序一个表与 Rails 4 中的另一个表有很多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32396105/