mysql 滚动加载,分页算法

JayeCoder 发布于 2016/06/24 16:33
阅读 712
收藏 1

有这样一个场景,页面上滚动加载数据

1、前端:html javascript ajax , 后端:java mysql。

2、一共有20条数据,每次加载10条,sql写法是:select * from tab limit start , pageSize。start的值用pageNo * pageSize,加载完第一页后,从前10条中删除1条,由于start 的值还是 10,加载第二页时,就会数据不准确

对于类似问题,大家怎么处理的,使用的什么算法。

加载中
0
月生无界
月生无界
删除的时候直接刷新页面重新拿,多简单
月生无界
月生无界
回复 @leo108 : 我不觉得有什么问题,就算别人把第一页全部删完了,那也最多是第二页变成拿第三页的,而且,可以随便删数据的话,那用户就应该做好这种体验准备,不然,你觉得,有好方法就说嘛
leo108
leo108
假如不仅仅是当前用户可以删除,其他用户也能删除的时候,你这个方法就懵逼了
月生无界
月生无界
回复 @imeasyer : 从删除记录那一页开始,全部重新拿,多简单的事
JayeCoder
JayeCoder
回复 @月生无界 : 再举个例子,如果我一共有三页数据,现在加载了两页,我要从第一页的数据里删除一条。
月生无界
月生无界
回复 @imeasyer : 首先,你发请求拿数据是不是一页发一个请求,对吧,假如你第一页拿了,第二页也拿了,但是你在第二页删除数据,那么重新拿第二页就行了,局部刷新这种就不用说了吧,当然,如果已经拿了第三页,那么还是要重新拿第二第三页
下一页
0
Mr_K
Mr_K
这个就是分页啊~有什么不同
0
沉默的懒猫
沉默的懒猫
不知道是不是类似更多那种。
0
tinshen
tinshen

无解。

这个问题没有必要去纠结。

除非是你的不存在删除的功能,不然这个问题根本就没办法避免。

shijacky
shijacky
我也觉得没必要纠结
0
开不了囧
开不了囧
我们删除后会刷新页面
0
54mark
54mark
不用在意这些细节~各大网站都有这种问题
0
leo108
leo108

很简单,页面多加两个参数就好了,lastId和lastTime,lastId代表当前页面最后一项的自增id,lastTime代表当前页最后一项的更新时间,然后

select * from table where update_time <= $lastTime and id <> $lastId order by update_time desc

leo108
leo108
当然这种方法你需要给update_time加索引,不然表大的话会比较慢
0
我不是小强
我不是小强

记录下来在页面上修改(这里是删除)了多少条记录,计算偏移量的时候把这个值减掉就行

select * from tb_xx where ... limit $limit offset $offset

$limit 是固定的

$offset 可以从 ($pageNum - 1) * $limit 计算得到

以你说的场景为例,第一页,$pageNum = 1, $limit = 10, $offset = 0

在第一页删除了一条数据,记下来$modCount=1,那么在翻第二页的时候

$offset = ($pageNum - 1) * $limit - $modCount = 9 不就是对了的么

0
fly2xiang
fly2xiang
要看你页面的排序方式,如果是根据自增主键排序的话就每次请求带上上次返回的最后一个id,然后取大于id的top 10即为下一页。此种方式适用于文章列表等按照时间线来排序的列表
0
螃蟹大叔
螃蟹大叔

start = (page-1)*pagesize;

page是第几页的意思,比如page=1

返回顶部
顶部