created_at descでソートされた列でグループ化されたすべてのレコードを選択する方法を教えてください。Rails 3:group =>:フィールドはcreated_at descによってソートされます
記事ごとに最新のコメントをすべて取得したい場合があります。私はグループ(:article_id)をやっても、常に最も古いコメントを返します。
よろしくお願いいたします。以下のような ロンヴィグモレル
created_at descでソートされた列でグループ化されたすべてのレコードを選択する方法を教えてください。Rails 3:group =>:フィールドはcreated_at descによってソートされます
記事ごとに最新のコメントをすべて取得したい場合があります。私はグループ(:article_id)をやっても、常に最も古いコメントを返します。
よろしくお願いいたします。以下のような ロンヴィグモレル
をあなたはSQLで簡単に答えを見つけることができません - (グループは集計データのための一般的であるため)グループは、ソートの前に起こります。記事記録にlatest_comment_id
フィールドをそのまま残し、記事を見つけたらlatest_comment_idのコメントに参加してください。
記事ごとに複数のコメントが必要な場合は、複数のクエリを使用するか、記事ごとに最新のコメントだけを使用して一時テーブルを管理する必要があります。
何か:
Comment.order('created_at DESC').all
はそれを行う必要があります:)あなただけの最初の結果をしたい場合は
、first
代わりのall
使用。 limit
も使用できます。 Exemple初5件の結果を得るために:
Comment.order('created_at DESC').limit(5).all
Comment.group(:article_id).order('created_at DESC')
動作しません。クエリはarticle_idでグループ化されたすべてのコメントを選択しますが、順序はグループ部分の後に発生します。最も古いコメントが得られます。 – atmorell
しかし、記事ごとに複数のレコードを選択しないようにするにはどうすればよいですか?私は記事ごとに1つのコメントが必要です。 – atmorell
まあ、私はあなたがRailsのヘルパーでしかできないとは確信していません。これはかなり複雑に見えています!私はGoogleに関するいくつかの調査を行い、そのことがわかった:http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/ 。これはあなたがやろうとしていることですか?何でも見つけたら解決策を投稿してください;) –
これはまさに私がやろうとしていることです。マイアーティクルモデルでlatest_comment_id列を含むソリューションを探します。 – atmorell