1

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

根据我的阅读,我有 3 个选项

  1. 检索结果集中的所有行 - 对我来说不可能,因为它的大小
  2. 检索 1000 行,存储在临时表中并为其创建一个迭代器并通过它进行分页 - 查询太多 - 插入太多!
  3. 如果有人选择向前或向后翻页,则每次运行查询

现在我正试图让选项 3 工作。我的第一页显示为“select * from accout order by acct fetch first 10 rows only” Page next “select * from account where acct>(last record) order by acct fetch first 10 only”页面最后一条记录“select * from account where acct=(select max(acct) from account)"

问题是显示上一页,我真的很感激这方面的帮助。

4

3 回答 3

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)构造。

使用 aSELECT COUNT(*) FROM account来确定您将拥有多少页。

另请阅读使用 SQL 搜索 DB2 进行分页的最快最有效方法

于 2012-12-26T09:51:59.430 回答
0

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

$ db2set DB2_COMPATIBILITY_VECTOR=MYS
$ db2stop
$ db2start

在 db2cmd 中以使用该语法。

于 2013-03-07T17:55:20.393 回答
-1
SELECT * FROM foo LIMIT 10, 1;

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

这主要用于创建分页

于 2012-12-26T06:42:43.853 回答