【发布时间】:2017-07-08 13:12:32
【问题描述】:
我使用的是 Oracle 10g 速成版。我已将其与 codeigniter 链接。
我想每页获取 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 帖子:stackoverflow.com/questions/2912144/…
-
你做错了什么是
where rownum >= 2。一次生成一个行。第一行被分配rownum = 1,但随后它未能满足where条件,因此被丢弃。rownum = 1被重新分配到每个连续的行,并且每一行都在where子句中失败。这就是您在最后一个查询中得到空结果的原因。要保存它(尽管它可能无法满足您的需要),请生成rownum并在子查询中为其提供类似rnum的别名,然后在外部查询中选择rnum并根据以下条件编写where条件rnum,不是rownum。
标签: php oracle codeigniter