加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 19:40:31 所属栏目:百科 来源:网络整理
导读:什么是Rails 3的方式来排序.group()导致Activerecord(这里是“created_at”)? @messages = Message.group(:foo) 只会显示最旧的消息.我需要最新的显示. 我试过了 @messages = Message.group(:foo).having("created_at = MAX(created_at)") 没有成功.任何提
什么是Rails 3的方式来排序.group()导致Activerecord(这里是“created_at”)?
@messages = Message.group(:foo)

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

我试过了

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

没有成功.任何提示赞赏!

澄清:我正在寻找组内订购,而不是一般的message.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然后组,因此您需要使用两个查询:
message_ids = Message.select("MAX(id) AS id").group(:foo).collect(&:id)
@messages = Message.order("created_at DESC").where(:id => message_ids)

注意:这假设您有一个自动递增的ID列,这是大多数Rails表所做的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读