随着:limit
查询,我会得到前N个记录.获得最后N条记录的最简单方法是什么?
这是Rails 3的方式
SomeModel.last(5) # last 5 records in ascending order SomeModel.last(5).reverse # last 5 records in descending order
像这样的活动记录查询我认为可以得到你想要的东西('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
在rails 3.1中执行此操作的新方法是 SomeModel.limit(5).order('id desc')
对于Rails 4及以上版本:
您可以尝试这样的事情如果您想要第一个最早的条目
YourModel.order(id: :asc).limit(5).each do |d|
如果你想要最新的参赛作品,你可以试试这样的东西.
YourModel.order(id: :desc).limit(5).each do |d|
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
......需要一秒钟.
解决方案在这里:
SomeModel.last(5).reverse
"选择:由于轨道是懒惰的,它最终会与像SQL访问数据库 table
*FROM.table
ORDER BY table
.id
DESC LIMIT 5".