【问题标题】:Rails: Complex Active Record Query - Order child records based on number of siblingsRails:复杂的活动记录查询 - 根据兄弟姐妹的数量对子记录进行排序
【发布时间】:2016-05-18 07:15:23
【问题描述】:

http://www.trailerpuppy.com/trailers/popular

预告片属于电影。电影 has_many 预告片和 has_many 通知。我想返回通知最多的电影的最新预告片

预告片.rb

 def self.most_reminders_set(from_date, until_date, number_to_return)
    Trailer.joins(:movie => :notifications).
          where("movies.release_date > ?", from_date).
          where("movies.release_date < ?", until_date).
          select('trailers.*, COUNT(notifications.id) AS notifications_count').
          joins(:movie).group('trailers.id').
          order('notifications_count DESC').take(number_to_return).first(number_to_return)
end

所以基本上这个方法允许我设置一个时间范围,然后它会返回前 X 个预告片(谁的电影有最多的通知)。

问题在于我为同一部电影获得了多个预告片。我只想为每个唯一的 movie_id 返回一个预告片。

不确定在我的查询中添加到哪里。

【问题讨论】:

  • 您可以使用where(movies: { release_date: [from_date..until_date] }) 稍微清理一下。您是否尝试过在 movies.id 上进行分组?

标签: ruby-on-rails activerecord


【解决方案1】:

您需要一个子查询来获取最新的预告片。另外,我注意到您对movies 使用了两次joins,您不需要这样做。这是与您的问题相关的一篇好文章的链接:

http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/

【讨论】:

    猜你喜欢
    • 2022-08-19
    • 2021-05-29
    • 2015-01-28
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    相关资源
    最近更新 更多