mysql - 如何排序一个表与 Rails 4 中的另一个表有很多关系?

标签 mysql ruby-on-rails ruby sorting

我有三个表 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/

相关文章:

MySQL:简单列值递增安全吗?

ruby - 根据给定顺序对数字数组进行排序

php - fatal error : Call to a member function error() on a non-object

java.sql.SQLException : No database selected

ruby-on-rails - npm 在 Rails 中永远等价?

ruby-on-rails - rails : Keeping count of users unread notifications

适用于多行的 Ruby 'gets'

ruby-on-rails - 负载测试期间 Unicorn CPU 使用率激增,优化方法

PHP mysql注入(inject)保护

ruby-on-rails - 您如何通过Rails迁移克隆数据库表?