分页数据可能重复问题


场景

用户打开一页面,向服务端请求10条最新数据(第1页), 然后用户继续停留在这个页面,5分钟后,用户请求第2页数据。
在这5分钟时间内, 服务器中新增加了数据。

问题

如果服务器中数据是按 权重和ID倒序排序的( SELECT ... order by weight DESC, id DESC LIMIT 0, 10),
传统的分页处理方式,通过将下一页数据时发送第几页( http://host/news?page=2), 那么服务端中使用 select ... limit ... offset 的话, 像上述所描述的场景,拿到的第2页数据会有部分和第一页的相同。

请问,有什么方法解决第2页不拿重复数据的问题?

请求下一页的数据时,不只传页码,再加上上一页请求的最后那行数据的id和weight的值也可能不行。
如果请求下一页的数据, 将上一页及上一页之前的所有id提交到服务器, 如果页数比较多的话,数据就比较大了。 因是App应用,想数据尽可能的少。

Web开发 php

我系那个啥 12 years, 11 months ago

既然是ID排序可以在分页后跟当前页面最后一个ID为参数,但你的SQL让这么做变得复杂
首先生产环境下前端是不需要如此精确的,例如淘宝,amazon都会有一页显示50条数据,但可能只显出48条,第二页重复第一页商品的情况更是常见,这不重要,没必要为此增加逻辑复杂度
新增商品后,第二页显示当前正确的第二页还是专为客户端显示一个该客户端的第二页这是皆有正确性的选择

如果必须这么做,只能将weight与id传入URL参数,然后where weight<xx&&id<0

1A-Type answered 12 years, 11 months ago

Your Answer