【发布时间】:2017-08-20 10:49:00
【问题描述】:
我有一个经常更改的 SQLite 表,每分钟更改很多次。它很容易被想象成一个种子表,其中新的种子被附加到表的末尾,而旧的种子(已完成)从一开始就被删除。
这让我在实现分页时感到头疼,表格中可能有 100 多个种子,但表格正在迅速变化。我正在用 C++ 编写这个,GUI 是用 Javascript/HTML 编写的。到目前为止,这是我的逻辑。我想我知道我需要做什么,但我不知道该怎么做。
鉴于:
- UI 将始终根据页面编号而不是 SQL Id 要求提供行列表
- UI 将始终设置每页的行数(本例中为 10)
- 应用程序将始终返回 UI 页面数和当前页面
在初始化时,UI 将要求数据的第 1 页,限制为 10 行。那么应用逻辑如下
- 获取表中的行数。 (100)
- 获取表格的页数(100 / 10) = 10
- 获取前 10 行。这可以通过多种方式完成,例如简单地将
LIMIT设置为 10
我可用的应用程序功能看起来像这样
GetDbRows( startId, limit );
因此,UI(当前)必须知道开始的行 ID。如果这是一个静态表,这很容易。应用程序将最后一个 ID 返回给 UI。但它是动态表,所以这个ID没有意义。在请求下一页时,最后一个 ID 实际上可能已经消失。
那么,使用应用程序逻辑,我怎样才能正确地将数据库拆分为页面,并请求页面 2,例如?我可以做到这一点而不必从字面上获取所有行 ID 并拆分它们吗?是否有任何 SQL 语法可以为我执行此操作?如GET id at page 3
【问题讨论】:
-
LIMIT 后跟 OFFSET 会做你想要的,例如 SELECT * FROM mytable LIMIT 10 OFFSET 20?请参阅:sqlite.org/lang_select.html 这将为您提供第 3 页
-
美丽..谢谢
标签: c++ mysql sqlite pagination