根据特定ID

时间:2016-09-06 08:57:25

标签: sql database postgresql api pagination

我想为api / ajax做分页, 如果使用第1页,第2页类型..可能是重复行,如果新行只是创建。

所以我看看instagram api在下面做了多少尝试,

第一次请求:
使用查询1
读取第一行偏移量参数为零并返回{jax}的数据以请求下一行

pagination

请求下一个:
使用查询2
如果按"pagination": { "prev_end_id": .., "count": ... } id排序为price_number,我将返回integerprev_end_id,检查prev_end_pricedesc,然后选择更小或更大。
但是,如果按asc name或其他类型列排序,该怎么做?

我是否正确,是否有更好的方法来解决这个问题?

我应该忽略哪个列的顺序,只需返回string
当下一个请求时,
在id上找到偏移量,然后与第一次请求一样吗?
是如何找到id的偏移基础?
选择所有行和循环行查找具体的id索引?听起来表现不佳......

end_id

1 个答案:

答案 0 :(得分:1)

您应该使用密钥集分页,因为OFFSET是一个性能问题,如果同时添加新数据(如您所见),可能会导致奇怪的结果。

如果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所述的此方法。