AS400 / DB2中的分页查询(SQL)

时间:2012-12-26 06:36:31

标签: php sql db2 ibm-midrange

我一直在尝试为我们的表创建基于php的基于Web的分页 有超过一百万行。

根据我所读到的内容,我有3个选项

  1. 检索结果集中的所有行 - 对我来说不可能是大小
  2. 检索1000行,存储在临时表中并为其创建迭代器 它和页面浏览 - 太多查询 - 插入太多!!
  3. 每次有人选择向前或向后选择页面时运行查询
  4. 现在我正试图让选项3工作。 我把第一页显示为 “通过acct fetch前10行仅从accout命令中选择*” 第二页 “通过acct fetch从acct>(最后记录)的帐户中选择* 前10只“ 页面最后记录 “select * from account where acct =(select account(acct)from account)”

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

$ db2set DB2_COMPATIBILITY_VECTOR=MYS
$ db2stop
$ db2start
db2cmd中的

以使用该语法。

答案 2 :(得分:-1)

SELECT * FROM foo LIMIT 10, 1;

尝试mysql中的限制和偏移..

这主要用于创建分页