2010-11-23 2 views
5

created_at descでソートされた列でグループ化されたすべてのレコードを選択する方法を教えてください。Rails 3:group =>:フィールドはcreated_at descによってソートされます

記事ごとに最新のコメントをすべて取得したい場合があります。私はグループ(:article_id)をやっても、常に最も古いコメントを返します。

よろしくお願いいたします。以下のような ロンヴィグモレル

答えて

3

をあなたはSQLで簡単に答えを見つけることができません - (グループは集計データのための一般的であるため)グループは、ソートの前に起こります。記事記録にlatest_comment_idフィールドをそのまま残し、記事を見つけたらlatest_comment_idのコメントに参加してください。

記事ごとに複数のコメントが必要な場合は、複数のクエリを使用するか、記事ごとに最新のコメントだけを使用して一時テーブルを管理する必要があります。

16

何か:

Comment.order('created_at DESC').all 

はそれを行う必要があります:)あなただけの最初の結果をしたい場合は

first代わりのall使用。 limitも使用できます。 Exemple初5件の結果を得るために:

Comment.order('created_at DESC').limit(5).all 
+0

しかし、記事ごとに複数のレコードを選択しないようにするにはどうすればよいですか?私は記事ごとに1つのコメントが必要です。 – atmorell

+0

まあ、私はあなたがRailsのヘルパーでしかできないとは確信していません。これはかなり複雑に見えています!私はGoogleに関するいくつかの調査を行い、そのことがわかった:http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/ 。これはあなたがやろうとしていることですか?何でも見つけたら解決策を投稿してください;) –

+0

これはまさに私がやろうとしていることです。マイアーティクルモデルでlatest_comment_id列を含むソリューションを探します。 – atmorell

1
Comment.group(:article_id).order('created_at DESC') 
+1

動作しません。クエリはarticle_idでグループ化されたすべてのコメントを選択しますが、順序はグループ部分の後に発生します。最も古いコメントが得られます。 – atmorell

関連する問題