2017-02-19 7 views
0

Я использую Oracle 10g express edition. Я связал его с codeigniter.Как записать fecth в Oracle 10g Express Edition в определенных пределах?

Я хочу получить 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

Возможный дубликат [Альтернативы LIMIT и OFFSET для подкачки в Oracle ] (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' во внешнем запросе и запишите условие' where' в терминах '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]) в вашем состоянии.