分页的核心思想

        现在很多程序都会用到分页这个东西,究竟分页是什么东西呢?当我们需要提取大量数据的时候,不可能一次提取所有数据,而是先提取一部分显示给用户看,在用户需要的情况下提取剩下的数据。这个时候我们就可以用到分页了。

        例如现在有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)

        这样做就可以只用两次查询和一次排序。

        归根结底,分页在存储过程,其实就是实现提取(页码*每页行数)条数据,然后再从中提取属于当前页面的数据。

        如有不当请指点。>.<。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值