繁体   English   中英

获得倒数第 n 条记录的最佳方法是什么?

[英]Whats the best way to get the nth to last record?

我在这里看到: How to get last N records with activerecord? 获得最后 5 条记录的最佳方法是 SomeModel.last(5)。 获得第 5 个最后记录的最佳方法是 SomeModel.last(5).first 还是其他?

提前致谢!

您正在寻找的是LIMITOFFSET的组合,并确保查询使用ORDER BY作为约束。 这在 PostgreSQL - 查询:限制和偏移文档页面 中有所描述。

一个例子是:

irb> SomeModel.count
=> 35

irb> SomeModel.order(:id).reverse_order.limit(1).offset(4)
# SomeModel Load (0.7ms)  SELECT "some_models".* FROM "some_models" ORDER BY "some_models".id DESC LIMIT 1 OFFSET 4
=> #<ActiveRecord::Relation [#<SomeModel id: 31, name: "hello world", created_at: "2014-03-24 21:52:46", updated_at: "2014-03-24 21:52:46">]>

产生与以下相同的结果(尽管是 AR::Relation):

irb> SomeModels.last(5).first
# SELECT "some_models".* FROM "some_models" ORDER BY "some_models"."id" DESC LIMIT 5
=> #<SomeModel id: 31, name: "hello world", created_at: "2014-03-24 21:52:46", updated_at: "2014-03-24 21:52:46">

不同的是,在前面的查询中,PostgreSQL 会在内存中处理.reverse_order.limit.offset查询,并在返回结果之前适当地限制值。 在后者中,PostgreSQL 将返回 5 个结果,您可以使用#first限制 Ruby 中的值。

您可以以相反的顺序对查询使用offset 例如,可以使用以下命令检索倒数第五个创建的记录:

SomeModel.order("created_at DESC").offset(4).first

获得倒数第 5 条记录的最简单方法是结合降序排序和第五条

SomeModel.order("created_at DESC").fifth

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM