0

我在 AS3 AIR 中使用 SQLLite,并且在以下示例查询中分页(每页 100 个结果):

SELECT * FROM table1 WHERE col1 LIKE "%my keywords here%" LIMIT 100 OFFSET 0

它工作正常 - 当用户点击下一个或上一个按钮时,我会更改偏移量。所以下一个按钮的后续查询是:

SELECT * FROM table1 WHERE col1 LIKE "%my keywords here%" LIMIT 100 OFFSET 100

只是想知道是否有可能获得可能结果的总数,所以我可以播放“第 3 页,共 12 页”等?还是我必须做两个查询 - 第一个是没有 LIMIT 和 OFFSET 的 count(*) 所以我得到结果总数,然后是上面的查询来得到实际的页面结果?

感谢您的时间和帮助。

4

2 回答 2

1

SQLite 会即时计算结果记录,因此无法找出没有LIMIT;会获得多少记录。你必须使用COUNT(*).

请注意,除非您使用ORDER BY. 此外,大OFFSET值是非常低效的;您应该在当前页面的最后一个值之后继续(请参阅滚动光标)。

于 2013-09-15T08:19:24.103 回答
1

在最新版本的 SQLite(3.25.0 及更高版本)中,支持窗口函数。这可能不是最有效的方法,但您可以在同一查询中获取记录总数,如下所示:

SELECT *, COUNT() OVER() AS totalCount  FROM dt_fi_business_account WHERE fi_name LIKE "%cre%" LIMIT 10 OFFSET 0

请记住,每行都会返回总计数。

于 2020-05-09T18:29:43.547 回答