84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
场景是这样的:安卓客户端要按登录时间在首页显示用户列表,服务端提供数据,每次下拉请求,相当于是从服务端请求加载下一页的的数据,但是这样会有一个问题,假如第一页服务端给了客户端最新的数据,但是在加载第二页之前,又有几个新的用户登录了进来,这样这些新用户就是最新登录的,所以在第二页的时候就会有一些第一页的用户,请教给位大神怎么解决这个问题?
认证高级PHP讲师
几个方案:
客户端去重,优点:实现简单。缺点:数据不准确。
(推荐)根据时间排序,客户端获取下一页数据时传回上一次最后一条数据的登录时间,数据库查询的时候select * from table where 登录时间 < 上一次最后一条数据的登录时间 order by 登录时间。
给每个客户端记录一个时间戳,获取第一页的时候更新这个时间戳,查询下一页的时候select * from table where 登录时间 < 时间戳 order by 登录时间 limit 当前页
如果用户顺序是不变的,可以每次记录显示的最后一个用户,从服务端获取到下一页后,先搜下如果有之前的最后一个用户,就跳过他以及之前的用户,为了避免用户不够了可能要根据实际情况每次多加载几个。如果本来应该在第二页的用户因为重新登陆跑到最前边去了,应该也没问题吧,一般也不会有人能注意到。
几个方案:
客户端去重,优点:实现简单。缺点:数据不准确。
(推荐)根据时间排序,客户端获取下一页数据时传回上一次最后一条数据的登录时间,数据库查询的时候select * from table where 登录时间 < 上一次最后一条数据的登录时间 order by 登录时间。
给每个客户端记录一个时间戳,获取第一页的时候更新这个时间戳,查询下一页的时候select * from table where 登录时间 < 时间戳 order by 登录时间 limit 当前页
如果用户顺序是不变的,可以每次记录显示的最后一个用户,从服务端获取到下一页后,先搜下如果有之前的最后一个用户,就跳过他以及之前的用户,为了避免用户不够了可能要根据实际情况每次多加载几个。如果本来应该在第二页的用户因为重新登陆跑到最前边去了,应该也没问题吧,一般也不会有人能注意到。