看了不少分页方面的文章,感觉还是直接使用SQL来的简单直接,就简单研究了一下……
不过,鄙人Oracle数据库方面的知识实在有限,有什么不对之处还请多多指教,效率嘛,不知道怎么测,俺只管好用就行了……
小经验:
select * from tablename where rownum>10 and rownum<20
像这样的语句是不对的,oracle认为条件不成立,至于为什么这么弱智,俺也不知道……
rownum只可以用<=来操作,不可以用>=
select * from tablename where rownum<20
minus
select * from tablename where rownum<10
这样也能达到分页的目的,不过不支持LONG字段,所以还是用下面的吧……
--------------------------------------------------------------------------------------
方法1,据说效率较高
select * from (select rownum idd,t.* from (select * from gsdtlongtest order by id desc) t
where rownum<20) tt where tt.idd>10
select * from (select rownum idd,t.* from (select * from gsdtlongtest order by id desc) t
where rownum<end) tt where tt.idd>start
curpage 当前页
pagenum 每页显示条数
start=(curpage-1)*pagenum
end=start+pagenum+1
最后一页如果不足pagenum无所谓
--------------------------------------------------------------------------------------
方法2(43条记录,每页20条,第2页):
select * from (select * from gsdtlongtest where rownum<=23)
where id not in(select id from gsdtlongtest where rownum<=3) order by id desc
select * from (select * from gsdtlongtest where rownum<=start)
where id not in(select id from gsdtlongtest where rownum<=end) order by id desc
start=total-(curpage-1)*pagenum
end=start-pagenum+1
注意:为了减少子查询数,直接按照默认的数据库记录顺序进行分页计算。主键id顺序增加,最新纪录为表中最后一条记录。效率不知道怎么样……
---------------------------------------------------------------------------------------