2014-03-24 2 views

답변

4

은 당신이 찾고있는 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의 값을 제한합니다.

2

offset과 역순으로 쿼리 할 수 ​​있습니다.

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

이 것은 나에게 같은 요소를 점점되지 함께'User.count # => 11','User.order ('created_at DESC') .offset (5) .first.id # => 6' 및 User.last (5) .first.id # => 7'. 내가 뭔가 잘못하고 있니? – raviolicode

+1

아니, 잘하고있어 @raviolicode'레코드를 반환하기 시작하기 전에 건너 뛸 레코드 수를 지정하기 위해 오프셋을 사용한다. ' 마지막 5 개의 레코드를 건너 뛰고 실제로 offset (4)이어야합니다 – dasnixon

+1

@liamneesonsarmsauce, raviolicode : 고마워요, 제 대답이 수정되었습니다. – Baldrick

0

5 마지막 레코드를 얻을 수있는 간단한 방법은 fifth

SomeModel.order("created_at DESC").fifth 
관련 문제