Я использую 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) "
Он вернулся пустые результаты. Что я делаю не так?
Извините, я просто предположил, что мой ответ работает на все, что использует SQL. Я удалю этот ответ. Пожалуйста, ознакомьтесь с этой записью SO: 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
То, что вы делаете неправильно, это 'where rownum> = 2'. Строки генерируются по одному. Первая строка присваивается 'rownum = 1', но затем она терпит неудачу в состоянии' where', поэтому она отбрасывается. 'rownum = 1' ** переназначается ** для каждой следующей строки, и каждая строка не выполняет предложение' where'. Вот почему вы получаете пустой результат в последнем запросе. Чтобы сохранить его (хотя он может и не делать то, что вам нужно), сгенерируйте 'rownum' и дайте ему псевдоним типа' rnum' в подзапросе, затем выберите 'rnum' во внешнем запросе и запишите условие' where' в терминах 'rnum', а не' rownum'. – mathguy