我想爲api/ajax做分頁, 如果使用第1頁,第2頁類型..可能是重複行,如果新行剛創建。找到索引/偏移基於特定的ID
所以我看到Instagram的API做以下嘗試,
第一個請求:
使用查詢1
讀第一行偏移參數爲零,並返回pagination
數據AJAX請求下一
"pagination": {
"prev_end_id": ..,
"count": ...
}
請求下一個:
使用查詢2
如果訂購id
或price_number
爲integer
,我將返回prev_end_id
或prev_end_price
,請檢查desc
或asc
,然後選擇更小或更大。
但是如果按name
string
或其他類型的列排序,該怎麼做呢?
我是否正確,有沒有更好的方法來解決這個問題?
我應該忽略由列的順序,只是返回end_id
,
時要求下場,
找到抵消ID的基礎,然後做一樣的第一個請求?
是如何找到基於id的偏移量?
選擇所有行和循環行找到特定的id索引?聲音表現不佳......
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")
);
感謝您的回覆,這看起來與我的示例相同?我的問題是,如果列數據類型是字符串不是整數,那麼如何使它成爲sort_key
user1775888
是的,我有一個印象,你在你的問題中考慮過這種可能性,但你的例子很難閱讀,我認爲它是最好的明確。字符串應該沒有問題,該方法適用於允許比較的任何數據類型,並且字符串當然可以。 –
非常感謝你,我會試試這個! – user1775888