【问题标题】:Cursor Based Pagination Across Multiple Tables [closed]跨多个表的基于光标的分页[关闭]
【发布时间】:2023-03-12 17:28:01
【问题描述】:

我有 3 个表格可以作为单独的提要和组提要访问。

对于单个提要,我可以根据每一行的唯一 ID 实现基于光标的分页。

我将如何为组提要实现基于光标的分页,它基本上将所有 3 个表格合并为 1 个提要?

每个表都有唯一的 ID 和创建时间的时间戳(尽管这不是唯一的)。

我考虑过将时间戳用作某种指针,例如,特定时间戳之后的结果,但这可能会导致结果丢失,就好像您在时间戳之后请求了 10 行,而这些行都有与另外 20 行相同的时间戳,当您执行后续请求时,您将错过后面的 20 行。

如何解决这个问题?

【问题讨论】:

    标签: mysql pagination


    【解决方案1】:

    窗口函数。

    MySQL 8.0 引入了对标准 SQL 窗口函数的支持。见https://dev.mysql.com/doc/refman/8.0/en/window-functions.html

    SELECT *
    FROM (
      SELECT ..., ROW_NUMBER() OVER () AS rownum
      FROM <multiple tables joined>
    ) AS t
    WHERE rownum BETWEEN ? and ?
    

    不需要LIMIT。您只需使用参数选择与您要查看的当前“页面”对应的行范围。

    如果你回答“但我还没有升级到 MySQL 8.0”,那么我会说你现在有充分的理由升级。

    【讨论】:

      猜你喜欢
      • 2021-04-09
      • 2018-11-30
      • 1970-01-01
      • 2019-04-21
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 2015-07-06
      • 2021-03-16
      相关资源
      最近更新 更多