0

私の単純化されたレールアプリは次のようになります

# chapter.rb
has_many :sections
has_many :videos, through: :sections

# section.rb
belongs_to :chapter
has_many :videos

# video.rb
belongs_to :section
has_many :votes

# vote.rb
belongs_to :video

私がやりたいのは、特定のチャプターで現在人気のあるトップ 5 の動画を見つけることです。これは、先月に受け取った投票数で動画を並べることを意味します (もちろん、結果は 5 つに制限されます)。

Chapter モデルにメソッドを書きたかったのですが、これにはクエリpopular_videosが必要だと思いますよね? find_by_sqlしかし、このクエリを書くのに十分なSQLを知りません。

投票テーブルにはcreated_at列があり、データベースに postgres を使用しています。どんな助けでも大歓迎です。

4

1 に答える 1

1

Railsについては何も知りませんが、質問の内容からテーブル構造を推測すると、次のようなSQLが必要なものを提供する1つの方法になると思います:

SELECT video.id, video.name, count(*) as vote_count
  FROM video JOIN vote ON (video.id = vote.video_id)
  WHERE vote.date > (current_date - interval '1 month')
  GROUP BY video.id, video.name
  ORDER BY vote_count DESC
  LIMIT 5;

PostgreSQL 9.1 以降を実行している場合は、おそらくリストvideo.nameから省略できGROUP BYます。

于 2012-05-14T18:58:24.747 に答える