【问题标题】:SQL query sorting groups by the most recent postSQL 查询按最新帖子排序组
【发布时间】:2012-02-11 20:03:33
【问题描述】:

我正在创建一个 rails 3 应用程序。

它有群组(比如有成员的社交群组等等,成员可以在群组上发帖)。 所以我的模型是Group and Post,group has_many posts(每个(posts)显然都有group_id)。

我正在尝试弄清楚如何获取按最新帖子排序的群组列表,包括没有任何帖子的群组。

谢谢!

【问题讨论】:

    标签: sql ruby-on-rails sorting


    【解决方案1】:

    根据您拥有的列,它可能类似于

    select g.group_id, g.group_name, max( p.post_date )
    from   group g left join post p on g.group_id = p.group_id
    group by g.group_id, g.group_name
    order by max( p.post_date ) desc
    

    【讨论】:

    • 非常感谢,我已经尝试了一个多小时,但没有任何成功。除了缺少 DESC ;) 你的答案是完美的。
    • 谢谢,我已经添加了说明,只是为了方便以后阅读本文的人。
    • 对于任何想在 rails 3 中寻找最终解决方案的人来说,它看起来像这样:sorted_groups_ids = Group.joins("LEFT JOIN posts p ON groups.id = p.group_id").select("groups.id").group("groups.id").order("MAX(p.id) DESC").map(&:id) sorted_groups = Group.find(sorted_groups_ids).sort_by { |g| sorted_groups_ids.index(g.id) } 第二行是必要的,因为另一个 find 破坏了之前的顺序
    【解决方案2】:
       Group.joins('LEFT OUTER JOIN posts ON groups.id = posts.group_id').order('posts.created_at desc').group('groups.id')
    

    【讨论】:

      【解决方案3】:

      对于任何想在 rails 3 中寻找最终解决方案的人来说,它看起来像这样:

      sorted_groups_ids = Group.joins("LEFT JOIN posts p ON groups.id = p.group_id").select("groups.id").group("groups.id").order("MAX(p.id) DESC").map(&:id) sorted_groups = Group.find(sorted_groups_ids).sort_by { |g| sorted_groups_ids.index(g.id) }

      第二行是必要的,因为另一个 find 破坏了之前的顺序

      【讨论】:

        猜你喜欢
        • 2013-06-17
        • 1970-01-01
        • 1970-01-01
        • 2017-07-27
        • 2023-03-18
        • 2013-08-22
        • 1970-01-01
        • 1970-01-01
        • 2019-06-03
        相关资源
        最近更新 更多