2012-02-11 17 views
0

私はレール3アプリケーションを作成しています。最新の投稿でグループをソートするSQLクエリ

これはグループ(メンバーとのソーシャルグループなど、メンバーはグループに投稿できます)があります。 私のモデルはグループと投稿で、グループにはhas_manyの投稿があります(それぞれ(投稿)には明らかにgroup_idがあります)。

投稿なしのグループを含め、最近の投稿で並べ替えられたグループのリストを取得する方法を理解しようとしています。

ありがとうございます!

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) }

答えて

1

あなたが持っているものの列に応じて、それがレール3に最終的な解決を探していることでしょう誰のために

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 
+0

ありがとう、私は何も成功していない時間以上を把握しようとしていました。あなたの答えはDESCがないことを除いて完璧です)。 – v0rin

+0

ありがとう、私は、これを後で読む人の利益のために、descを追加しました。 –

+0

レール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 ")マップ(&:id) sorted_groups = Group.find(sorted_groups_ids).sort_by {| g |他の検索が前の注文を破るので、2行目が必要です – v0rin

0
Group.joins('LEFT OUTER JOIN posts ON groups.id = posts.group_id').order('posts.created_at desc').group('groups.id') 
+0

申し訳ありませんが動作しません – v0rin

0

のようなものかもしれない、それはこのようになります。 2番目の行は、別の検索が前の順序を破るために必要です。

関連する問題