现在很多程序都会用到分页这个东西,究竟分页是什么东西呢?当我们需要提取大量数据的时候,不可能一次提取所有数据,而是先提取一部分显示给用户看,在用户需要的情况下提取剩下的数据。这个时候我们就可以用到分页了。
例如现在有100条数据,我们可以把它分成10页,每页10行。那么在提取数据的时候,我们就可以先提取第1~10行,当用户点击下一页的时候,提取第11~20行,以此类推......
要实现这种功能要怎么做呢?
首先我们需要写一段存储过程。指定两个变量,一个是页码PageIndex,一个是每页显示的行数RowCount,存储过程应该实现这样的功能:
首先查询前PageIndex*RowCount条数据,降序排列,再从查询结果中提取前RowCount条数据,再降序排列,这样就可以获取到当前页显示的数据了。
以MSSQL为例,SELECT TOP (RowCount) * FROM (SELECT * FROM (SELECT TOP(PageIndex*RowCount) * FROM Table order by ID) order by ID decs) order by ID desc,当然,这样的效率比较慢,需要进行三次查询三次排序,还有一种方法,不用TOP关键字,这样也可以兼容没有TOP关键字的数据库,例如Oracle。
对于没有TOP关键字的数据库,例如Oracle,我们可以这样,提取行号小于等于PageIndex*RowCount的数据(因为行号是从1开始的),然后再提取行号大于(PageIndex-1)*RowCount的数据。
SELECT * FROM ( SELECT * FROM Table WHERE rownum <= (PageIndex*RowCount) order by ID) WHERE rownum > ((PageIndex-1)*RowCount)
这样做就可以只用两次查询和一次排序。
归根结底,分页在存储过程,其实就是实现提取(页码*每页行数)条数据,然后再从中提取属于当前页面的数据。
如有不当请指点。>.<。