Mysql Sql查询以获取rails中最流行的帖子
所以我有一个sql查询,我用它来获取最受欢迎的基于投票的帖子,每个帖子都有一个链接 我想得到的职位,有独特的链接,只有那些投票率最高的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 =
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,但只返回投票率最高的那一个