我想为api / ajax做分页, 如果使用第1页,第2页类型..可能是重复行,如果新行只是创建。
所以我看看instagram api在下面做了多少尝试,
第一次请求:
使用查询1
读取第一行偏移量参数为零并返回{jax}的数据以请求下一行
pagination
请求下一个:
使用查询2
如果按"pagination": {
"prev_end_id": ..,
"count": ...
}
或id
排序为price_number
,我将返回integer
或prev_end_id
,检查prev_end_price
或desc
,然后选择更小或更大。
但是,如果按asc
name
或其他类型列排序,该怎么做?
我是否正确,是否有更好的方法来解决这个问题?
我应该忽略哪个列的顺序,只需返回string
,
当下一个请求时,
在id上找到偏移量,然后与第一次请求一样吗?
是如何找到id的偏移基础?
选择所有行和循环行查找具体的id索引?听起来表现不佳......
end_id
答案 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所述的此方法。