gpt4 book ai didi

mysql - 可以通过事件记录中关联的计数来排序吗?

转载 作者:可可西里 更新时间:2023-11-01 08:55:42 26 4
gpt4 key购买 nike

假设我的帖子有很多评论

是否可以执行 ActiveRecord 查询以获取大多数评论排序的帖子?

令我惊讶的是,这个在普通旧版 MySQL 中相对常见的查询在 AR 中似乎没有简单的答案。是的,您可以使用 counter_cache,但这并不是真正重新创建原始查询。

我错过了什么?

更进一步。如果 Posts 有很多 Comments 而有很多 Likes 怎么办。是否有可能获得总计点赞数最多的帖子?

谢谢!

最佳答案

正如您所说,counter_cache 似乎是最接近“rails 方式”的方式。到目前为止,我还没有遇到任何用于此特定目的的 AR 定义方法,但这是我所见过的最接近它的方法:

@posts = Post.select("posts.*, COUNT(comments.id) AS count_comments").joins("LEFT OUTER JOIN comments ON posts.id = comments.post_id").group("posts.id").order("count_comments DESC")

@posts.each do |post|
puts "Comments: #{post.count_comments}"
end

自定义选择以包括 count_comments 属性。连接而不是包含,因为包含将覆盖选择语法。自定义连接语法而不仅仅是 :comments,因为否则它将是一个内部连接,这将阻止没有评论的帖子被检索。

这基本上是自己编写整个 SQL 语法,但仍然......它有效:)

关于mysql - 可以通过事件记录中关联的计数来排序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4954560/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com