mysql - 根据上次修改的属性排序时出现分页问题

标签 mysql sql sql-server postgresql pagination

我需要显示一些根据修改后的列排序的记录(最新事件在顶部) (在顶部发布新的编辑或评论)

应用程序 UI 有类似“更多”帖子按钮的 Twitter,可无限滚动。每个“更多”都会将接下来的 10 条记录添加到 UI。

问题是当任何要显示的记录被修改时,分页索引会中断

例如 假设我在工作表中有记录 A,B,C,..Z

我第一次向用户显示记录A-J

SELECT * FROM Jobs WHERE 1 ORDER BY last_modified DESC LIMIT 0, 10

第二次如果没有记录被修改

SELECT * FROM Jobs WHERE 1 ORDER BY last_modified DESC LIMIT 10, 10

将返回K-T

但是如果在用户点击'more button'之前某些主体修改了J之后的任何记录,

SELECT * FROM Jobs WHERE 1 ORDER BY last_modified DESC LIMIT 10, 10

将返回J-S

这里记录 J 是重复的。我可以通过不向 UI 插入 J 来隐藏它,但是更多按钮将只显示 9 条记录。但是这种机制在更新大量记录时失效,如果修改了10条记录,查询将再次返回A-J

处理此分页问题的最佳方法是什么?

如果记录有多个更新,则保留第二个时间戳会失败。

查询的服务器缓存?

最佳答案

我会做一个 NOT IN() 和一个 LIMIT,而不仅仅是一个带有预设偏移量的直接 LIMIT。

SELECT * FROM Jobs WHERE name NOT IN('A','B','C','D','E','F','G','H','I','J') 
ORDER BY last_modified DESC LIMIT 10

通过这种方式,您仍然每次都能获得最近的 10 个,但您需要跟踪已经显示的 ID 并不断与您的 sql 查询中的 ID 进行负匹配。

关于mysql - 根据上次修改的属性排序时出现分页问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21846477/

相关文章:

mysql - 我可以从 Ubuntu 命令提示符获取 MySql DB 列表吗

mysql - 来自另一个表的有限时间范围的聚合

php - CodeIgniter - 针对第二个数据库的表单验证

SQL 子查询/连接

sql - Sequelize 外键引用复合主键

mysql - 为什么大于与等于在 MySQL SELECT 中有所不同?

sql - 根据条件求和sql中的列

mysql - 从 Microsoft Sql 服务器中提取报告

sql - 如何对时差超过一小时的记录进行分组?

sql-server - 德尔福EMS FireDAC : How to pass parameter from client to server using EMS?