当前位置:  开发笔记 > 后端 > 正文

如何使用activerecord获取最后N条记录?

如何解决《如何使用activerecord获取最后N条记录?》经验,为你挑选了6个好方法。

随着:limit查询,我会得到前N个记录.获得最后N条记录的最简单方法是什么?



1> Bongs..:

这是Rails 3的方式

SomeModel.last(5) # last 5 records in ascending order

SomeModel.last(5).reverse # last 5 records in descending order


它完全符合它的要求:`SELECT"items".*FROM"items"ORDER BY id DESC LIMIT 50`
在Rails 4中,.last()生成的查询也是Nick提到的最佳查询
注意:这不是一种实现它的好方法,性能方面 - 至少不是Rails 3.1.SomeModel.last(5)将执行没有限制的select语句,将SomeModel的所有记录作为数组返回到Ruby,之后Ruby将挑选出最后的(5)元素.效率方面,目前,您希望使用限制 - 特别是如果您有潜在的许多元素.
用Postgres试试吧!我肯定先遇到麻烦.在SQL中,除非您指定顺序,否则无法保证顺序,但MySQL更宽容.

2> Dan McNevin..:

像这样的活动记录查询我认为可以得到你想要的东西('Something'是模型名称):

Something.find(:all, :order => "id desc", :limit => 5).reverse

编辑:如评论中所述,另一种方式:

result = Something.find(:all, :order => "id desc", :limit => 5)

while !result.empty?
        puts result.pop
end


不推荐调用#find(:all).直接调用#all.

3> Arthur Neves..:

在rails 3.1中执行此操作的新方法是 SomeModel.limit(5).order('id desc')


这比`last(5)`更好,因为它返回了进一步链接的范围.
我在Rails 4上使用`SomeModel.limit(100).reverse_order`(http://guides.rubyonrails.org/active_record_querying.html#reverse-order)它是一样的.

4> Gagan Gami..:

对于Rails 4及以上版本:

您可以尝试这样的事情如果您想要第一个最早的条目

YourModel.order(id: :asc).limit(5).each do |d|

如果你想要最新的参赛作品,你可以试试这样的东西.

YourModel.order(id: :desc).limit(5).each do |d|


Order()返回所有记录.不需要链接`YourModel.all.order()`因为它与`YourModel.order()相同`

5> Amin Ariana..:
对于Rails 5(可能是Rails 4)

坏:

Something.last(5)

因为:

Something.last(5).class
=> Array

所以:

Something.last(50000).count

可能会炸毁你的记忆或永远消失.

好方法:

Something.limit(5).order('id desc')

因为:

Something.limit(5).order('id desc').class
=> Image::ActiveRecord_Relation

Something.limit(5).order('id desc').to_sql
=> "SELECT  \"somethings\".* FROM \"somethings\" ORDER BY id desc LIMIT 5"

后者是一个未评估的范围.您可以链接它,或通过它将其转换为数组.to_a.所以:

Something.limit(50000).order('id desc').count

......需要一秒钟.



6> Developer..:

解决方案在这里:

SomeModel.last(5).reverse

"选择:由于轨道是懒惰的,它最终会与像SQL访问数据库 table*FROM.table ORDER BY table.idDESC LIMIT 5".


@Developer是绝对正确的。执行的SQL是:`SELECT`table`。* FROM`table` ORDER BY`table`.`id` DESC LIMIT 5` **不**全选
推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有