여기서 보았습니다 : How to get last N records with activerecord? 마지막 5 레코드를 얻는 가장 좋은 방법은 SomeModel.last (5)입니다. 다섯 번째 마지막 레코드를 SomeModel.last (5) .first로 가져 오는 가장 좋은 방법은 무엇입니까? 아니면 다른 것입니까? 사전에n 번째 레코드를 마지막으로 얻는 가장 좋은 방법은 무엇입니까?
감사합니다!
여기서 보았습니다 : How to get last N records with activerecord? 마지막 5 레코드를 얻는 가장 좋은 방법은 SomeModel.last (5)입니다. 다섯 번째 마지막 레코드를 SomeModel.last (5) .first로 가져 오는 가장 좋은 방법은 무엇입니까? 아니면 다른 것입니까? 사전에n 번째 레코드를 마지막으로 얻는 가장 좋은 방법은 무엇입니까?
감사합니다!
은 당신이 찾고있는 LIMIT
, OFFSET
의 조합이며, 조회가 제약 조건으로 ORDER BY
을 사용하고 있음을 보장 예를 들어, 다섯 번째 마지막으로 생성 된 레코드로 검색 할 수 있습니다. 이것은 PostgreSQL - Queries: Limit and Offset documentation page에 설명되어 있습니다.
예는 다음
로 (나마 아칸소 :: 관계로서) 동일한 결과를 얻을 수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">]>
:
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 마지막 레코드를 얻을 수있는 간단한 방법은 fifth
SomeModel.order("created_at DESC").fifth
이 것은 나에게 같은 요소를 점점되지 함께'User.count # => 11','User.order ('created_at DESC') .offset (5) .first.id # => 6' 및 User.last (5) .first.id # => 7'. 내가 뭔가 잘못하고 있니? – raviolicode
아니, 잘하고있어 @raviolicode'레코드를 반환하기 시작하기 전에 건너 뛸 레코드 수를 지정하기 위해 오프셋을 사용한다. ' 마지막 5 개의 레코드를 건너 뛰고 실제로 offset (4)이어야합니다 – dasnixon
@liamneesonsarmsauce, raviolicode : 고마워요, 제 대답이 수정되었습니다. – Baldrick