2016-09-08 5 views
0
이 그래서 paginate a query LIMITOFFSET

SQLite는 순서는

SELECT * 
FROM db.table 
LIMIT 6 
OFFSET 0 

하지만 ORDER BY에이 결과를하려고하면 내가 처음 n 명령 행을 얻을 첫 번째 n 행을 명령 할 수

오프셋.

SELECT * 
FROM db.table 
LIMIT 6 
OFFSET 0 
ORDER BY first_name COLLATE NOCASE 

그래서 그 대신 내가 싶어

bob 
charles 
dave 
dan 
doug 
durrand 

bob 
doug 
elliot 
manny 
ralph 
xavier 

답변

2

당신은 하위 쿼리하려면이 실제로 행 불확정 집합을 반환

SELECT t.* 
FROM (SELECT * 
     FROM db.table 
     LIMIT 6 OFFSET 0 
    ) t 
ORDER BY first_name COLLATE NOCASE; 

주 , 그러면 주문됩니다.

order by을 사용하지 않으면 반드시 동일한 행 집합이 반환되는 것은 아닙니다.

2

"첫 번째 n 행"은이 컨텍스트에서 의미가 없습니다. 테이블에는 고유 한 순서가 없습니다. 당신은 그것을 지정해야합니다. 일반적으로 이것은 삽입 순서를 추적하기 위해 자동으로 증가하는 ID 열로 수행됩니다 (이는 아마도 사용자의 의도입니다).

ORDER BY 절에서 순서를 지정하고 있습니다. 따라서이 순서대로 정렬됩니다. 그러나 ID 열이있는 경우 다음과 같은 subselect를 수행 할 수 있습니다.

select name from (
    select name from foo 
    order by id 
    limit... 
) order by name