我想实现或使用允许在SQLite中逐步浏览表的功能。穿越SQLite表
如果我有一个表格Products
有100k行,我想一次检索10k行。类似于网页将列出数据的方式,并具有链接来遍历数据。
是否有选择语句可以使这个简单?我看到并尝试将ROWID与LIMIT结合使用,如果不订购数据,似乎可以。
//这似乎工程,如果不订购。
SELECT * FROM Products WHERE ROWID BETWEEN x AND y;
我想实现或使用允许在SQLite中逐步浏览表的功能。穿越SQLite表
如果我有一个表格Products
有100k行,我想一次检索10k行。类似于网页将列出数据的方式,并具有链接来遍历数据。
是否有选择语句可以使这个简单?我看到并尝试将ROWID与LIMIT结合使用,如果不订购数据,似乎可以。
//这似乎工程,如果不订购。
SELECT * FROM Products WHERE ROWID BETWEEN x AND y;
您是否在寻找offset and limit? SQLite支持这些。然后您可以使用SQLite也支持的order by。
编辑:要详细,你可以这样做:
Select * from Products order by name limit 10000 offset 10000;
这从表中,按名称排序取第二10K页。在处理限制/偏移量和排序时注意性能问题。
你可以在你的代码中使用这个查询,并将值传递给偏移的参数化值,你为每个需要的记录块增加10k。 – 2010-04-15 14:36:58
谢谢,这正是我正在寻找的。 – galford13x 2010-04-15 14:38:52
感谢您修复我的错误羊 – 2010-04-15 14:54:39
如果您订购行,会发生什么? – 2010-04-15 14:03:37
如果未明确指定,ROWID仍然可用,但不能保持为静态。也就是说,隐式ROWID将由行物理地写入表中的顺序决定。因此,如果表按名称顺序存储,并且我想按数量进行排序,则ROWID将不会表示返回的顺序,而是隐式的ROW编号。 – galford13x 2010-04-15 14:14:29
你应该尽量避免在SQL工作中尽量使用任何内建的ROWID。这不是SQL标准的一部分,它是一个附加组件,不能保证在大多数RDBMS上。我会使用ORDER BY子句来创建一个排序。我发现大多数查询都可以在不依赖隐式行号的情况下编写,并且有一点想象力。 – 2010-04-15 14:33:41