我正在编写一个应用,其中每个用户都有很多帖子。我想生成帖子最多的前3名用户列表。我能想到的唯一方法是获取所有帖子并计算每个用户拥有的数量。这似乎非常昂贵,而且不具备可扩展性。准确性很重要。有没有人有什么建议?
答案 0 :(得分:2)
你可能在这里寻找一个counter_cache:查看ActiveRecord association documentation。实质上,如果在users表上有一个默认值为0的posts_count整数列,并且在关联中将:counter_cache设置为true,则Rails将自动更新该列。然后,您可以执行User.order('posts_count DESC').limit(3)
之类的操作,以便为用户提供最多的帖子。
答案 1 :(得分:1)
Post.group(:user_id).order("count_all DESC").limit(3).count
应该做的工作。它按用户对帖子进行分组,在帖子数量之后对其进行排序,并返回最多帖子的3个帖子。 sql查询可能更容易理解:
(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
和rails为你返回一个像这样的哈希:
{user_id => number_of_posts, user_id => number_of_posts, user_id => number_of_posts}