如何获得最大喜欢的帖子或者使用喜欢的帖子来计数

时间:2016-09-27 23:54:22

标签: sql ruby-on-rails postgresql join

我有两个模型发布和喜欢,他们之间有关系。发布has_many喜欢。我想找到一种最佳方式来找到哪个帖子最喜欢。

的一种方法
count = {}
Post.includes(:likes).each do |post|
  count[post.id] = post.likes.count
end

最初我使用的数组不是一个好的数据结构所以我使用了哈希,但我仍然不满足于这种方法。用喜欢的帖子最好的是什么。

此外,我尝试了以下查询,但它没有按预期工作,所以任何人都可以提出更好和最佳的方法。

Post.joins("LEFT OUTER JOIN Likes ON likes.post_id =posts.id").group("posts.id").order("COUNT(likes.id) DESC") 

2 个答案:

答案 0 :(得分:1)

Use counter_cache这样您就可以在Post个对象上计算一些喜欢的内容,然后您可以调用Post.maximum(:likes_count).first来检索最喜欢的帖子。同样,任何Post查询都会包含一个类似计数的帖子。

答案 1 :(得分:1)

您不需要加入。通过 post_id 喜欢进行分组并对其进行统计。带有最大数量的结果 post_id 将是您最喜欢的帖子的ID。然后你可以加入或只选择你要找的帖子。在纯SQL中,它看起来像:

SELECT l.post_id, count(*) as cnt 
    FROM likes l
    GROUP BY l.post_id 
    ORDER BY cnt DESC 
    LIMIT 1;
相关问题