0

これが比較的簡単な解決策であることを願っています。投稿テーブルといいねテーブルがあります。ユーザーは投稿にいいね!

それを念頭に置いて、先週から最も人気のある投稿 (いいね) を取得するにはどうすればよいでしょうか? クエリを先週だけに制限すると、スケーリングの問題を寄せ付けないはずなので、ソリューションをクエリだけに抑えたいと思います(と思います)。

4

2 に答える 2

0

まず、1 週間前の日時を表す変数が必要です。次のようなものになると思います:

one_week_ago = Time.now - 1.week

上位 n 件の投稿のすべての投稿を比較する前に、投稿ごとに先週のいいねの数を計算し、それを変数に格納する必要があります。

likes_for_last_week = post.likes.where("created_at > ?", one_week_ago).count

これらすべてを配列に格納できます。

[[post,likes_for_last_week][post,likes_for_last_week]...]

次に、<=> 演算子を使用して並べ替えます。

簡潔で申し訳ありませんが、私はかなり初心者のプログラマーであるため、これだけのガイダンスを得るにはかなりの量の調査が必要でした。

于 2012-08-10T20:12:30.750 に答える
0

名前付きスコープでこれを行うことをお勧めします。

SQL クエリは次のようになります。

SELECT post_id, count(post_id) as count FROM "likes" 
GROUP BY post_id ORDER BY count desc LIMIT 3

次のように Like クラスでこれを取得できます。

scope :popular, select("post_id, count(post_id) as count").group(:post_id).order("count desc").limit(3)

次に、最も人気のある投稿が必要な場合は、次のようにします。

@popular = Like.popular
@popular[0].post_id # this will be the id of the Post
@popular[0].count   # this will be the count of likes for that Post

これの利点は、常に最も人気のある投稿が表示されることです。好きなものを先週のものに制限したい場合は、上記の select ステートメントを に入れ、の前にalambda {}を使用します。引数を渡して、フィルタリングするまでの時間を制御することもできます。詳細については、引数の受け渡しに関する ActiveRecord ガイドの詳細を参照してください。where("created_at < ?", DateTime.now - 1.week)select

于 2012-08-10T21:54:01.630 に答える