2012-12-26 68 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到使用該語法。