我需要显示一些根据修改后的列排序的记录(最新事件在顶部) (在顶部发布新的编辑或评论)
应用程序 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/