我想为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