远程分页和 last_page:在数据库查询期间或之后进行过滤?

Remote pagination and last_page: filter during, or after, database query?

我想使用 Tabulator 的远程分页从我的数据库 table 加载记录,一次一页。我希望我应该能够使用 Tabulator 发送到我的远程后端的页面和大小参数来确定要从数据库中 select 的哪些记录。 例如,对于 page=2 和 size=10,我可以使用 MySQL 的 LIMIT 10,20 来 select 要在第 2 页上显示的记录(如果 size 设置为 10)。

但是,这样做使我无法使用所有记录的计数来确定 table 中的页数。对 returned 记录进行计数只会产生 10 条记录,即使总共有 500 条记录(例如),因此只会显示一个分页按钮(而不是预期的 50 个按钮)。

因此,为了在 Tabulator 中“正确”进行远程分页,看来我必须进行查询以计算数据库中的所有记录(没有限制),然后进行计数以确定 last_page ,然后执行类似于 PHP 的 array_slice 的操作,将第 n 页的记录作为数据集提取到 return。或者我可以执行 2 个数据库查询:计算所有记录以确定页数,然后执行 LIMIT [start],[end] 查询。
这是正确的吗?

Tabulator 需要知道最后的页码,以便在 table 页脚中布置分页按钮,以便用户可以 select 从页面列表中查看他们想要查看的页面。

您只需要做一个查询来计算记录总数并将其除以请求中传递的页面大小数。您可以 运行 计数查询非常有效地只返回计数而不返回数据。

然后您可以 运行 对记录设置限制的标准查询来检索该页面的记录。

如果您想进一步优化,您可以将计数值保存在缓存中,这样您就不需要在每次请求时都生成它。