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) "
空の結果が返されました。私は間違って何をしていますか?
申し訳ありませんが、私は答えがSQLを使用するすべてのもので動作すると仮定しました。私はその答えを取り除きます。この後の記事をチェックしてください:http://stackoverflow.com/questions/2912144/alternatives-to-limit-and-offset-for-paging-in-oracle – ultrajohn
[LIMITとOFFSETの代わりにOracleでページングを行う可能性があります](http://stackoverflow.com/questions/2912144/alternatives-to-limit-and-offset-for-paging-in-oracle) – ultrajohn
あなたが間違っているのは、 'rownum> = 2'です。行は1つずつ生成されます。最初の行には 'rownum = 1'が割り当てられますが、' where'条件に失敗して破棄されます。 'rownum = 1'は各連続する行に**再割り当て**され、各行は' where'節に失敗します。このため、最後のクエリで空の結果が得られます。これを保存するには(必要な処理をしていないかもしれませんが)、 'rownum'を生成し、' rnum'のようなエイリアスをサブクエリに入れ、外側のクエリで 'rnum'を選択し、' where'条件を'rownum'ではなく' rnum'です。 – mathguy