2016-09-06 6 views
0

api/ajaxのページ番号を指定したい場合は、 ページ1を使用する場合は2ページをタイプしてください。特定のIDのインデックス/オフセットベースを見つける

だから私がやってどのようにInstagramのAPIを参照して、以下の

最初の要求しようとした:最初の行のオフセットのパラメータを読ん
使用クエリ1
はゼロであり、次の

"pagination": { 
    "prev_end_id": .., 
    "count": ... 
} 
を要求するAjaxのため 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>
あなたの2番目のクエリは次のようになります。

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

というように、あなたが完了するまで。

効率を上げるため、sort_keyにインデックスを作成してください。

この方法はhereと記載されています。

+0

返信いただきありがとうございます。これは私の問題例と同じですか?私の問題は、列のデータ型が整数ではない場合、それがどのようにsort_key user1775888

+1

はい、私はあなたの質問でこの可能性を考慮した印象を受けましたが、あなたの例は読みにくいので、明示すること。文字列は問題ありません。メソッドは比較可能なデータ型で動作し、文字列は確かに動作します。 –

+0

ありがとう、私はこれを試してみましょう! – user1775888

関連する問題