如何从分页类型查询中获取总可能的结果集?

时间:2013-09-14 15:06:50

标签: sqlite pagination

我在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

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

感谢您的时间和帮助。

2 个答案:

答案 0 :(得分:1)

SQLite动态计算结果记录,因此无法找出没有LIMIT的情况下会得到多少记录;你必须使用COUNT(*)

请注意,除非您使用ORDER BY,否则无法保证记录的顺序。 此外,大OFFSET值非常低效;你应该在当前页面的最后一个值之后继续(见Scrolling Cursor)。

答案 1 :(得分:1)

在最新版本的SQLite(3.25.0和更高版本)中,支持window functions。这可能不是最有效的方法,但是可以在同一查询中按以下方式获取记录总数:

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

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