数据库分页-5

作者:chilleen 来源:ITPOW(原创) 日期:2006-6-5

前面讲的几种分页方法,综合效率与适用性来讲,B1 是最好的。但能不能对 B1 继续改进呢,可以的。

假设有一个新闻表,按 id 的逆序分页排列。

select *
    from (select top 页大小 * 
              from (select top 当前页*页大小 * from news order by id desc) a  
              order by a.id) b
    order by b.id desc
  • 先逆序取得当前页及之前的所有记录。
  • 再正序取出当前页的记录。
  • 将当前页的记录逆序排列得最终的排列结果。

这种 SQL 语句可能不适合于 Access,上述“当前页*页大小”应该是计算好才能进入 SQL,而不是在 SQL 中计算乘积。

其实上述 SQL 还是需要改进的,想想页大小为 2,总记录数为 3,根据上述 SQL 语句,在第二页时也显示两条记录,原因是第二个 select 选取的是页大小,应该先取出总记录数,再计算出当前页的大小(实际上除了最后一页,其它各页都是一样的)。语句改为:

select *
    from (select top 当前页大小
              from (select top 当前页*页大小 * from news order by id desc) a  
              order by a.id) b
    order by b.id desc
相关文章