我们的分页方式大致如下(以Oracle为例):
1. 获取符合“条件1”的总记录数
select count(*) from T where 条件1
2. 利用Oracle的rownum获取指定页的数据,在“?”处指定起始行号和结束行号
select * from ( select row_.*, rownum rownum_ from ( SELECT * FROM T where 条件1) row_ where rownum <=?) where rownum_ > ?起始行号和结束行号的值,需要总记录数、每页行数、当前页号才能计算得出(后两者通过参数直接获取),因此使用了第一步来查询总记录数。不知道大家的分页是如何做的,是否可以一次查询直接得到结果,或者,有何种方式可进一步提高效率?望不吝赐教!
1. 获取符合“条件1”的总记录数
select count(*) from T where 条件1
2. 利用Oracle的rownum获取指定页的数据,在“?”处指定起始行号和结束行号
select * from ( select row_.*, rownum rownum_ from ( SELECT * FROM T where 条件1) row_ where rownum <=?) where rownum_ > ?起始行号和结束行号的值,需要总记录数、每页行数、当前页号才能计算得出(后两者通过参数直接获取),因此使用了第一步来查询总记录数。不知道大家的分页是如何做的,是否可以一次查询直接得到结果,或者,有何种方式可进一步提高效率?望不吝赐教!
在那里看看有无能回答你的,谢谢,LZ,甭忘了给俺分哦,谢谢LZ
要比
select count(*)快特别是字段较多的时候
pageindex 要显示的页(从1开始)
select top (pagerow) * from ABC where id not in (select top ((pageindex-1)*pagerow) id from ABC)把要显示的页 前面的记录过滤掉不过一开始总要搞下select count(*) 不然怎么知道有几页
可以把count(1)出来的总数一直传递下去,如果你觉得有必要的话
期待 13楼
这种情形比较特殊,似乎只能个别单独处理了,多谢提醒!
数据量多的话,建议用分页的 SQL 只获取当前页数据。
至于 select count(*), 我认为倒是不一定要用。
从使用 google 的情况看,google 搜索的时候,从页面上也看不出共有几页。它只是翻页到最后一页,发现没有数据了,然后才能看出来,一共有几页。
如果你的用户,不需要每次都从页面上看出,共有几页,那么也可以不去执行 select count.
然后用确定下要查询的页数(number)和第几页(page),
select top page id,name
from 表
where 条件 and id not in ( select top(number*(page-1))id from 表 where 条件)
我一般就是这么写的,你可以参考下