2016-09-06 2 views
0

api/ajax에 대한 페이지 매기기를 수행하고 싶습니다. 페이지 1, 2 페이지 유형을 사용하는 경우 .. 새 행만 작성하면 중복 행이 될 수 있습니다.특정 ID에 대한 색인/오프셋 기본 찾기

는, 그래서 일을 어떻게 인스 타 그램 API를 참조 아래 시도

첫 번째 요청 :
사용 쿼리 1
는 첫 번째 행 오프셋 읽기 매개 변수 제로와 아약스는 다음

"pagination": { 
    "prev_end_id": .., 
    "count": ... 
} 
를 요청하는 pagination 데이터를 반환

다음 요청 :
사용 검색어 2
id 또는 price_number로 주문한 경우 0입니다.이면 prev_end_id 또는 prev_end_price을 반환하고 desc 또는 asc을 확인한 다음 작거나 크게 선택하십시오.
name 또는 다른 유형의 열로 주문하는 경우 어떻게해야합니까?

나는 정확한 것을하고 있습니까, 이것을 해결하는 더 좋은 방법이 있습니까?

나는 단지 요청이 다음,
이 ID에 기반을 상쇄 찾을 end_id,
이 먼저 요청과 동일 할 반환되는 열을 기준으로 순서를 무시 하는가?
그래서 어떻게 id에 오프셋 기지를 찾을 수 있습니까?
모든 행 및 루프 행을 선택하면 특정 id 인덱스를 찾을 수 있습니까? OFFSET 성능 문제이며, 새로운 데이터가 동시에 추가하는 경우 (당신이 관찰로) 이상한 결과가 발생할 수 있기 때문에,

1 
SELECT 
    p.* 
    FROM product p 
    ORDER BY p.id desc NULLS LAST OFFSET $1 LIMIT $2 
2 
SELECT 
    p.* 
    FROM product p 
    WHERE p.id < $1 
    ORDER BY p.id desc NULLS LAST LIMIT $2 

1 
SELECT 
    p.* 
    FROM product p 
    ORDER BY p.name desc NULLS LAST OFFSET $1 LIMIT $2 
2 
SELECT 
    p.* 
    FROM product p 
    AND p.price_number < $1 
    ORDER BY p.name desc NULLS LAST LIMIT $2 


CREATE TABLE IF NOT EXISTS "product"(
    "id" SERIAL NOT NULL, 
    "name" varchar DEFAULT NULL, 
    "name_slug" varchar DEFAULT NULL, 
    "price_number" numeric DEFAULT NULL, 
    PRIMARY KEY ("id") 
); 

답변

1

당신은 키 집합 매김를 사용해야합니다 ... 성능 저하 소리. sort_key는 결과를 정렬하는 분야 인 경우

, 첫 번째 쿼리는 다음과 같이 표시됩니다

SELECT * FROM product 
ORDER BY sort_key 
LIMIT 50; 

그런 다음 당신이 가장 큰이, sort_key 반환 기억이 정수 또는 문자열로, 만약에 상관없이 <last_key>.
두 번째 쿼리는 다음과 같습니다

SELECT * FROM product 
WHERE sort_key > <last_key> 
ORDER BY sort_key 
LIMIT 50; 

등 작업이 완료 될 때까지.

효율성을 위해 sort_key에 색인을 생성하십시오.

이 방법은 here입니다.

+0

답장을 보내 주셔서 감사합니다. 문제의 사례와 동일하게 보입니까? 내 문제는 열 데이터 형식이 문자열이 아닌 정수가 아닌 경우 sort_key가되도록하는 방법입니다. last_key – user1775888

+1

예, 나는이 가능성을 귀하의 질문에 고려했다고 생각했지만 귀하의 사례는 너무 읽기가 힘들어서 내가 가장 잘 생각했습니다. 명백한 것. 문자열은 문제가되지 않아야하며, 메서드는 비교를 허용하는 모든 데이터 형식에 대해 작동하며, 문자열은 확실히 않습니다. –

+0

정말 고마워요 !! – user1775888

관련 문제