欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

时间倒序分页查询,翻页中有新增的数据插入db,导致返回重复数据,这个有什么好的解决办法没?谢谢大家

程序员文章站 2022-05-03 15:00:46
...

时间倒序分页查询,翻页中有新增的数据插入db,导致重复数据,这个有什么好的解决办法没?谢谢大家

回复内容:

时间倒序分页查询,翻页中有新增的数据插入db,导致重复数据,这个有什么好的解决办法没?谢谢大家

你说的数据重复是这样么,在翻页的过程中,有人插入了一条数据,然后第一页的最后一条数据被再次分配到了第二页,变成了第二页的第一条输出,这条数据出现了两次?
如果是这个意思的话,我建议你分页在客户端做,查询的时候加个时间点,小于点击查询按钮的时间的数据会被查出来,然后在客户端进行分页,这样有新数据也不会影响分页,因为新数据根本没有取回来。由于你这个是时间倒叙,所以即使有新数据也不会被看到,不会产生数据遗漏。在数据再次加载的时候,再去取数据,新数据就会被查询出来。

前段时间刚处理了移动端类似的问题,说下移动端的思路:
1,首先是分为向下拉(获取最新数据)和向上滑(获取之前数据)
2,其次在每次向上滑获取之前数据时,我都会传一个id,通过这个id做为条件获取数据。你是时间倒序,那基本可以认定id也是倒序,刚刚传的id应该是之前获取数据中最小的id,除第一次外,以后每次获取数据都是小于这个id的数据
3,第一次获取数据的时候,因为没有id,所以按顺序获取最前的数据即可。

希望对你的问题有帮助!

不好意思竟然是世界上最好的语言。
而我回答是基于nodejs的。
不过不影响,理解思路就好。

-------原答案------

我在看coding.net的api的时候发现他有两种more的方式。
语法基于mongoose
一是通过分页,pagify。比如一页20的话,Model.find(query).skip(page*20 - 20).limit(20)。
二是用过加载更多,具体来说就是after。我没开发过这样的,不确定mongodb有没有after这样的属性。不过依托于一个sort里的东西的话,还是比较简单的,Model.find(query).sort('-time').where({time:{$gt:TIME}}).limit(20)

不确定有没有

如果mongodb有类似于after的话,那就更好了。(笔记time可能会撞车,而id不会)
Model.find(query).sort('-time').after({id:ID}).limit(20)

补充coding.net中加载更多的请求api

GET https://coding.net/api/activities/projects_last?last_id=14959187

相关标签: php mysql sql