如果执行更改操作,则保持分页可重复

时间:2008-09-17 15:38:45

标签: sql pagination

如果想要从支持分页的数据源中分页结果,我们必须进入以下过程:

  1. 定义页面大小 - 即每页显示的结果数量;
  2. 使用offset =页码(基于0)*页面大小
  3. 获取用户请求的每个页面
  4. 显示获取页面的结果。
  5. 所有这些都可以正常工作,而不考虑操作可能会影响后端系统,这会破坏正在发生的分页。我说的是有人在页面提取或删除数据之间插入数据。

    page_size = 10;
    get page 0 -> results from 0 to 9;
    user inserts a record that due to the query being executed goes to page 0 - the one just shown;
    get page 1 -> results from 10 to 19 - the first results on the page is the result on the old page 0.
    

    所描述的行为可能会导致观众混淆。你知道解决这个问题的任何实际解决方案。

3 个答案:

答案 0 :(得分:1)

这有一些思想流派。

  1. 数据得到更新,让它成为
  2. 你可以实现某种缓存方法来保存 整个结果集(这可能不是 如果真的合作的选择 大数据集)
  3. 您可以对每个页面操作进行比较并通知 用户如果总记录数 变化

答案 1 :(得分:0)

如果您关注的更新主要是新插入(例如,StackOverflow本身在分析问题并出现新问题时似乎遇到此问题),处理它的一种方法是在发出时捕获时间戳首先进行分页查询,然后将后续页面请求的结果限制为该时间戳之前存在的项目。

答案 2 :(得分:0)

只要用户了解基础数据总是在变化,他们就不会感到困惑。所以,只需按照简单的方式进行。

您可以缓存结果的前几页并将其用于后续视图,但结果将与数据库不同步,这更加令人困惑。