select * from (select rownum id,tab.* from tab order by datecol) where id > 10 and id < 20; 我现在采取了这种方法,但是担心效率不行,select rownum id,tab.* from tab order by datecol这个是不是把整个表全部给查询一遍?
难道不是: select * from tab where rownum>10 and rownum<20 order by datecoldatecol上建索引即可
mmm, rownum 用 〉 似乎不行试试这个select * from tab where rownum<20 order by datecol minus select * from tab where rownum<=10 order by datecol
记得ASP分页的时候就是查询全部记录然后设置游标分页的(记录集分页方式),不管了,我就这么写吧。 select * from (select rownum id,tab.* from tab order by datecol) where id > 10 and id < 20; 另外: select * from tab where rownum>10 and rownum<20 order by datecol 似乎太简单了,不知道能不能用,一会儿测试一下。
给一个实现oracle分页查询的函数 示例表如下: create table test( id varchar2(50), name varchar2(50) ); 函数定义: function sql_getlimitquery(string $query,string $fields, int $from,int $count) 返回:一个sql语句,实现查询从$from 到$from+$count的记录 参数解释: $query:一个基础sql查询语句,例如:select * from test; $fields:表示你要求返回的哪些字段列,例如:"id,name"; $from:查询从第几条记录开始,例如:0,必须为大于等于0的数 $count:每页显示的记录数,必须大于1,例如:10函数实现: function sql_getlimitquery($query="",$fields, $from, $count) { $query = "SELECT $fields FROM". " (SELECT rownum as linenum, $fields FROM". " ($query)". ' WHERE rownum <= '. ($from + $count) . ') WHERE linenum >= ' . ++$from; global $debug; if($debug)echo $query; return $query; }最终返回一个实现分页查询的sql语句.
where id > 10 and id < 20;
我现在采取了这种方法,但是担心效率不行,select rownum id,tab.* from tab order by datecol这个是不是把整个表全部给查询一遍?
select * from tab
where rownum>10 and rownum<20
order by datecoldatecol上建索引即可
where rownum<20 order by datecol
minus
select * from tab
where rownum<=10 order by datecol
select * from (select rownum id,tab.* from tab order by datecol)
where id > 10 and id < 20;
另外:
select * from tab
where rownum>10 and rownum<20
order by datecol
似乎太简单了,不知道能不能用,一会儿测试一下。
示例表如下:
create table test(
id varchar2(50),
name varchar2(50)
);
函数定义:
function sql_getlimitquery(string $query,string $fields, int $from,int $count)
返回:一个sql语句,实现查询从$from 到$from+$count的记录
参数解释:
$query:一个基础sql查询语句,例如:select * from test;
$fields:表示你要求返回的哪些字段列,例如:"id,name";
$from:查询从第几条记录开始,例如:0,必须为大于等于0的数
$count:每页显示的记录数,必须大于1,例如:10函数实现:
function sql_getlimitquery($query="",$fields, $from, $count)
{
$query = "SELECT $fields FROM".
" (SELECT rownum as linenum, $fields FROM".
" ($query)".
' WHERE rownum <= '. ($from + $count) .
') WHERE linenum >= ' . ++$from;
global $debug;
if($debug)echo $query;
return $query;
}最终返回一个实现分页查询的sql语句.