使用的示例表结构,表名:pagetable。其中,id是主键。
id | name | age | memo |
1 | 张一 | 20 | 空 |
2 | 张二 | 20 | 空 |
....... | 张..... | 20 | 空 |
7000 | 张N | 20 | 空 |
7000 | 张N+1 | 20 | 空 |
常用的access分页就是用not in来搞定。试了下不太合用,数据量越大,时间越长。
select top @pagesize * from pagetablewhere ID not in(select top @pagesize*@pageindex ID from pagetable order by ID desc) order by ID desc。
通过发现id是递增的主键索引,如果通过id排序,进行分页查找效果应该可以。记录可能存在删除的情况,id就不可能是连续递增的了。不能简单的用pagesize计算分页的id集合。
我们只要计算出前页id的最大值,并找出大于这个id的pagesize项,就是每页要显示的内容。这里的第一页需要注意,第一页仅需要简单的top pagesize就能解决:
select top @pagesize* from pagetable;
第二页以后可以用下面的sql
select top @pagesize* from pagetable where id > ( select max(id ) from (select top @pagesize*@pageindex id from pagetable order by id asc)) order by id asc。
本分页办法适合主键是数字,字符和时间类型,数据库可以使sqlserver,oracle和access。