首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SQLite使用LIMIT进行分页

使用SQLite使用LIMIT进行分页
EN

Stack Overflow用户
提问于 2013-06-27 18:34:59
回答 1查看 11K关注 0票数 1

我正在编写自己的SQLIteBrowser,我还有最后一个问题,这个问题显然在网络上经常被讨论,但它似乎没有一个很好的通用解决方案。

因此,目前我存储用户输入的SQL。每当我需要获取行时,我都会通过在SQL的末尾添加"Limit n,m`来执行SQL。

对于我主要使用的普通SQL,这似乎已经足够好了。但是,如果我想在查询中使用limit,这显然会给出一个错误,因为生成的sql可能如下所示:

代码语言:javascript
复制
 select * from table limit 30 limit 1,100

这显然是错误的。有没有更好的方法来做到这一点?

我的想法是,我可以扫描SQL并检查是否已经使用了limit子句,然后忽略它。当然,它不是那么简单,因为如果我有一个这样的sql:

代码语言:javascript
复制
 select * from a where a.b = ( select x from z limit 1)

显然,在这种情况下,它仍然应该应用我的限制,所以我可以从最后扫描字符串,看看是否有限制。我现在的问题是,这有多可行。因为我不知道SQL解析器是谁工作的,所以我不确定LIMIT是否必须在SQL的末尾,或者是否可以在SQL的末尾还有其他命令。

我用order bygroup by对它进行了测试,如果limit不在末尾,我会得到SQL错误,所以我的假设似乎是正确的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-27 21:04:25

我现在发现了一个更好的解决方案,它非常简单,不需要我解析SQL。

用户可以输入任意sql。结果被加载到一个表中。因为我们不想一次加载整个结果,因为这会返回数百万条记录,所以只检索了N条记录。当用户滚动到表的底部时,接下来的N个项目将被获取并加载到表中。

解决方案是,根据我的页面大小限制将SQL包装到一个外部sql中。

代码语言:javascript
复制
 select * from (arbitrary UserSQL) limit PageSize, CurrentOffset

我用我经常使用的SQL对它进行了测试,这似乎工作得很好,而且速度也足以满足我的目的。

但是,我不知道SQLite是否具有更快地获取新行的机制,或者是否必须每次都重新运行。在这种情况下,对于响应时间很长的复杂查询,它可能不是一个很好的解决方案。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17340850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档