Mysql Sql查询以获取rails中最流行的帖子

Mysql Sql查询以获取rails中最流行的帖子,mysql,sql,ruby-on-rails,activerecord,Mysql,Sql,Ruby On Rails,Activerecord,所以我有一个sql查询,我用它来获取最受欢迎的基于投票的帖子,每个帖子都有一个链接 我想得到的职位,有独特的链接,只有那些投票率最高的 ListsPost.find_by_sql("SELECT distinct lists_posts.*, COALESCE(rs_reputations.value, 0) AS votes FROM \"lists_posts\" LEFT JOIN rs_reputations ON lists_posts.id =

所以我有一个sql查询,我用它来获取最受欢迎的基于投票的帖子,每个帖子都有一个链接

我想得到的职位,有独特的链接,只有那些投票率最高的

ListsPost.find_by_sql("SELECT distinct lists_posts.*,
          COALESCE(rs_reputations.value, 0) AS votes FROM \"lists_posts\" LEFT JOIN rs_reputations ON
          lists_posts.id = rs_reputations.target_id AND rs_reputations.target_type = 'ListsPost' AND
          rs_reputations.reputation_name = 'votes' AND rs_reputations.active = 't'  ORDER BY votes desc, lists_posts.updated_at desc")

在没有任何更详细的信息的情况下,我构建了这个查询,希望一切顺利

SELECT lists_posts.*, rs_reputations.value
  FROM \"lists_posts\" 
  LEFT JOIN rs_reputations 
    ON  lists_posts.id = rs_reputations.target_id 
   AND rs_reputations.target_type = 'ListsPost' 
   AND rs_reputations.reputation_name = 'votes' 
   AND rs_reputations.active = 't'  
   AND rs_reputations.value IN (     SELECT MAX(COALESCE(rs_reputations.value, 0)) AS max_votes 
                          FROM \"lists_posts\" 
                          LEFT JOIN rs_reputations 
                            ON  lists_posts.id = rs_reputations.target_id 
                           AND rs_reputations.target_type = 'ListsPost' 
                           AND rs_reputations.reputation_name = 'votes' 
                           AND rs_reputations.active = 't'  
                         )
两个步骤:

1子选择找到一个最大值MAXCOALESCErs\u reputations.value,0 2主菜单选择搜索并显示具有此rs_reputations.value的所有记录


有了关于表结构的详细信息,我的查询可以得到优化。

经过大量的尝试和错误,我决定从头开始,我想到了这个。它似乎可以工作,但可以做一点精炼

SELECT lp.*, COALESCE(rs_reputations.value, 0) as votes
FROM lists_posts AS lp
INNER JOIN(
  SELECT lists_posts.post_id, lists_posts.id, MAX(rs_reputations.value)
  FROM lists_posts
  LEFT JOIN rs_reputations
  ON lists_posts.id = rs_reputations.target_id
  GROUP BY lists_posts.post_id)l
ON lp.post_id = l.post_id
AND lp.id = l.id
LEFT JOIN rs_reputations ON
  lp.id = rs_reputations.target_id
AND rs_reputations.target_type = 'ListsPost'
AND rs_reputations.reputation_name = 'votes'
AND rs_reputations.active = 't'
ORDER BY votes desc, updated_at desc

这似乎很管用。问题是,每个lists_posts都有一个post在里面,我想找到具有相同posts的lists_posts,但只返回投票率最高的那一个