2017-02-19 45 views
0

我正在使用Oracle 10g快速版。我已經把它和codeigniter聯繫起來了。如何在特定的限制內在Oracle 10g快速版中記錄記錄?

我想每頁抓取10條記錄來顯示記錄。

下面是表tbl_language: -

LANGUAGE_ID | LANGUAGE_TITLE | LANGUAGE_ADD_DATE | LANGUAGE_STATUS | 
===================================================================== 
     1  |  Hindi  | 18-FEB-17  |  1   | 
     2  |  English | 18-FEB-17  |  1   | 
     3  |  Bangla  | 18-FEB-17  |  1   | 

現在,我使用下面的查詢

"SELECT * FROM 
     (SELECT fetch.*, rownum rnum FROM 
      (SELECT * FROM tbl_language 
       WHERE language_id > 0 
       ORDER BY TO_CHAR(language_add_date, 'YYYY-MM-DD HH24:MI:SS') 
       DESC) 
     fetch)" 

它給了我在以下方式中的數據: -

LANGUAGE_ID | LANGUAGE_TITLE | LANGUAGE_ADD_DATE | LANGUAGE_STATUS | RNUM 
=============================================================================== 
     3  |  Bangla  | 18-FEB-17  |  1   | 1 
     2  |  English | 18-FEB-17  |  1   | 2 
     1  |  Hindi  | 18-FEB-17  |  1   | 3 

現在,我正在修改查詢兩個選擇特定行數(類似於使用限制) -

"SELECT * FROM 
    (SELECT fetch.*, rownum rnum FROM 
     (SELECT * FROM tbl_language WHERE language_id > 0 ORDER BY TO_CHAR(language_add_date, 'YYYY-MM-DD HH24:MI:SS') DESC) 
    fetch WHERE rownum >= 1 AND rownum < 2) " 

它返回一行。 然後我修改了查詢

"SELECT * FROM 
    (SELECT fetch.*, rownum rnum FROM 
     (SELECT * FROM tbl_language WHERE language_id > 0 ORDER BY TO_CHAR(language_add_date, 'YYYY-MM-DD HH24:MI:SS') DESC) 
    fetch WHERE rownum >= 2 AND rownum < 3) " 

它返回空結果。我究竟做錯了什麼?

+0

對不起,我只是假設我的答案適用於所有使用SQL的應用程序。我將刪除該答案。請看看這個SO帖子:http://stackoverflow.com/questions/2912144/alternatives-to-limit-and-offset-for-paging-in-oracle – ultrajohn

+0

[在Oracle中用於分頁的LIMIT和OFFSET的替代方案的可能重複](http://stackoverflow.com/questions/2912144/alternatives-to-limit-and-offset-for-paging-in-oracle) – ultrajohn

+0

你在做什麼錯是'where rownum> = 2'。行一次生成一個。第一行被分配了'rownum = 1',但是然後它失敗了'where'條件,因此被丟棄。 'rownum = 1'被**重新分配給每一個連續的行,並且每一行都失敗'where'子句。這就是爲什麼你在最後一個查詢中得到一個空的結果。爲了保存它(儘管它可能不會做你所需要的),在子查詢中生成'rownum'並給它一個別名如'rnum',然後在外部查詢中選擇'rnum'並且根據'rnum',而不是'rownum'。 – mathguy

回答

0

這是。答案在你的帖子:

"SELECT * FROM 
    (SELECT fetch.*, rownum rnum FROM 
     (SELECT * FROM tbl_language WHERE language_id > 0 ORDER BY TO_CHAR(language_add_date, 'YYYY-MM-DD HH24:MI:SS') DESC) 
    fetch WHERE rownum >= 1 AND rownum < 11) " 

我基本上改變了你的條件下的rownum範圍(即[1,10])。