我在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的计数(*)所以我得到结果总数,然后上面的查询得到实际的页面结果?
感谢您的时间和帮助。
答案 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
请记住,每一行都会返回总数。