【问题标题】:How to fecth records in Oracle 10g express edition within specific limits?Oracle 10g express 版中如何在特定范围内获取记录?
【发布时间】: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 &gt;= 2。一次生成一个行。第一行被分配rownum = 1,但随后它未能满足where 条件,因此被丢弃。 rownum = 1重新分配到每个连续的行,并且每一行都在where 子句中失败。这就是您在最后一个查询中得到空结果的原因。要保存它(尽管它可能无法满足您的需要),请生成 rownum 并在子查询中为其提供类似 rnum 的别名,然后在外部查询中选择 rnum 并根据以下条件编写 where 条件rnum,不是rownum

标签: php oracle codeigniter


【解决方案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 >= 1 AND rownum < 11) "

我基本上在您的情况下更改了 rownum 的范围(即 [1,10])。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    相关资源
    最近更新 更多