2012-03-04 5 views
0

私は各ユーザーが多くの投稿を持っているアプリを書いています。私は、最も多くの投稿を持つユーザーの上位3リストを生成したいと思います。私が考えることができる唯一の方法は、すべての投稿を取得し、各ユーザーの数を数えることです。これは非常に高価で、スケーラビリティがないようです。正確さは重要です。誰にも何か提案はありますか?has_many <model_name>というユーザーがいる場合、最も多くのユーザーを見つける正しい方法は何ですか。<model_name>?

答えて

1

Post.group(:user_id).order("count_all DESC").limit(3).count

仕事をする必要があります。これは、ユーザーによって投稿をグループ化し、投稿の数の後に注文し、最も多くの投稿を持つ3つだけを返します。

(0.3ms) SELECT COUNT(*) AS count_all, user_id AS user_id FROM "posts" GROUP BY user_id ORDER BY count_all DESC LIMIT 3

、あなたのために、このようなハッシュを返すレール:SQLクエリを理解し、より簡単かもしれ

{user_id => number_of_posts, user_id => number_of_posts, user_id => number_of_posts}

+0

感謝を。それはとても涼しいです、私はあなたがそれをそうすることができるとは考えていませんでした。 – Max

2

あなたはおそらくcounter_cacheを探しています:ActiveRecord association documentationをチェックしてください。基本的には、users表にデフォルトの0のposts_count整数列があり、関連でset:counter_cacheがtrueに設定されている場合、Railsは列を自動的に更新します。次に、最も多くの投稿を持つユーザーを取得するために、User.order('posts_count DESC').limit(3)のようなことをすることができます。

関連する問題