gpt4 book ai didi

ruby-on-rails-3 - Rails 3 : . group() 由 created_at 排序

转载 作者:行者123 更新时间:2023-12-03 23:51:15 24 4
gpt4 key购买 nike

在 Activerecord 中订购 .group() 结果的 Rails 3 方式是什么(此处为“created_at”)?

@messages = Message.group(:foo)

只会显示最旧的消息。我需要显示最新的。

我试过
@messages = Message.group(:foo).having("created_at = MAX(created_at)")

没有成功。任何提示表示赞赏!

澄清一下:我希望在自己内部订购该组,而不是普通的 messages.order("...")。
如果没有简单的 Activerecord 语法,我也会对原始 SQL 感到满意

更新:尝试 SQL 方式,这应该可以工作:
@messages = Message.find_by_sql("
SELECT messages.*
FROM messages
GROUP BY messages.foo
HAVING messages.created_at = MAX(messages.created_at)
ORDER BY messages.created_at DESC")

但这仅检索单个记录(未分组的记录)。据说分组的那些被省略了。不知道为什么,所有记录都有 :created_at 和 :foo 值

最佳答案

在某些数据库下,您不能在同一个查询中使用 order then group,因此您需要使用两个查询来完成:

message_ids = Message.select("MAX(id) AS id").group(:foo).collect(&:id)
@messages = Message.order("created_at DESC").where(:id => message_ids)

注意:这假设您有一个自动递增的 id列,大多数 Rails 表都这样做。

关于ruby-on-rails-3 - Rails 3 : . group() 由 created_at 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8011668/

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