2017-02-19 8 views
0

私はOracle 10g Express Editionを使用しています。私はそれをcodeigniterにリンクしています。Oracle 10g Express Editionのレコードを特定の制限内でどのように記録するか?

レコードを表示するために1ページに10レコードをフェッチしたいと考えています。私はそれは私に次のようにデータを与える次のクエリ

"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 | 
===================================================================== 
     1  |  Hindi  | 18-FEB-17  |  1   | 
     2  |  English | 18-FEB-17  |  1   | 
     3  |  Bangla  | 18-FEB-17  |  1   | 

: - - :ここで

は、テーブルtbl_languageある

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 

今、私は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 >= 1 AND rownum < 2) " 

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 WHERE rownum >= 2 AND rownum < 3) " 

空の結果が返されました。私は間違って何をしていますか?

+0

申し訳ありませんが、私は答えがSQLを使用するすべてのもので動作すると仮定しました。私はその答えを取り除きます。この後の記事をチェックしてください:http://stackoverflow.com/questions/2912144/alternatives-to-limit-and-offset-for-paging-in-oracle – ultrajohn

+0

[LIMITとOFFSETの代わりにOracleでページングを行う可能性があります](http://stackoverflow.com/questions/2912144/alternatives-to-limit-and-offset-for-paging-in-oracle) – ultrajohn

+0

あなたが間違っているのは、 'rownum> = 2'です。行は1つずつ生成されます。最初の行には 'rownum = 1'が割り当てられますが、' where'条件に失敗して破棄されます。 'rownum = 1'は各連続する行に**再割り当て**され、各行は' where'節に失敗します。このため、最後のクエリで空の結果が得られます。これを保存するには(必要な処理をしていないかもしれませんが)、 'rownum'を生成し、' rnum'のようなエイリアスをサブクエリに入れ、外側のクエリで 'rnum'を選択し、' where'条件を'rownum'ではなく' rnum'です。 – 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])を変更しました。

関連する問題