2012-12-26 67 views
1

我一直在努力为我们的表格 创建基于网页的基于页面的分页,其中有超过一百万行。AS400/DB2中的分页查询(SQL)

基于我已阅读,我有3个选项

  1. 检索结果集的所有行 - 不possiblefor我,因为规模的
  2. 检索1000行,存储在临时表,并创建一个迭代器 它和通过它的页面 - 太多的查询 - 太多的插入!
  3. 运行查询每一次,如果有人选择采用向前或向后

现在我试图让选项3工作。 我有显示为 第一页“选择从户头顺序*通过ACCT取前10行唯一的” 下一页 “SELECT * FROM帐户,ACCT>(最后一个记录)为了通过ACCT取 第10只” 页面最后一个记录 “select * from account where acct =(select max(acct)from account)”

问题是显示上一页,我真的很感谢 帮助。

+0

与实际数据一起,您需要跟踪两件事:页面上出现的递增ID的第一个值(看起来是'acct')以及每页显示多少项。一旦你有了,准备两个查询:一个用于“Previous”按钮,一个用于“Next”按钮。 – 2012-12-26 06:41:45

回答

-1
SELECT * FROM foo LIMIT 10, 1; 

尝试极限,在MySQL偏移..

这主要是在创建分页

+3

我正在尝试在DB2或AS400中执行它,而不是在mysql中。 – NKM

4
SELECT * 
    FROM (
    SELECT 
     *, 
     ROW_NUMBER() OVER (ORDER BY acct) AS RowNum 
    FROM 
     account 
) AS Data 
WHERE 
    RowNum BETWEEN 100 AND 110; 

首次使用时,你应该摆脱SELECT *的。只选择你需要的字段。

acct上设置索引,这将有助于ROW_NUMBER() OVER (ORDER BY acct)构造。使用SELECT COUNT(*) FROM account来确定您将拥有多少页面。

又读Fastest most/efficient way to do pagination with SQL searching DB2

0

的LIMIT..OFFSET解决方案在DB2支持10+。对于旧版本中,您必须启用与MySQL兼容性:为了

$ db2set DB2_COMPATIBILITY_VECTOR=MYS 
$ db2stop 
$ db2start 

在DB2CMD到使用该语法。