多语言展示
当前在线:771今日阅读:91今日分享:37

sql server 2000 top+order分页方法解析

因为一直接触的是mysql数据库,使用mysql中limit语句时行分页查询,所以,并没有研究过php+sql server数据库分页。对于sql server2005以上,可以使用ROW_NUMBER() OVER()进行数据库分页,但在sql server 2000就显得鸡肋了。不过,我们可以通过sql server中的top+order排序,达到limit相同的效果,但对于大数据量来说,页码越大,查询速度越慢。
方法/步骤
2

第一层语句如果有表a id    name 1     一2     二3     三4     四5     五6     六我们按每页两条记录,并以为倒序排列,第二页的结果应为4,3。查询语句应为SELECT * FROM (    SELECT TOP 2 * FROM(--pagesize 为分页的条数        SELECT TOP 2*2 * --offset 为当前页码乘以pagesize           FROM table order by field desc      ) as t1 order by field asc) as t2 order by field desc按最里层的语句:Select  TOP  2*2 * FROM table ORDER BY field DESCpagesize为2,当前页码page为2时,offset的值应为4,查询出4条记录,按泉酱id的倒序排列。返回的数据应为:6,5,4,3

3

第二层语句SELECT TOP 2 * FROM ()t1 order by field asc 这个语句的关键就在排序上,这个select语句会对最里层的select语句得到的结果,进行逆向排序。在第一层sql语句返回的结果是:6,5,4,3,逆向排序之后:3,4,5,6。因为分页数据是pagesize等于2,top之后,得到3,4。

4

第三层语句SELECT * FROM ( ……)as t2 order by field desc第三层语句只是起到一个正常排序的作用,因为第二层语句把结果逆向排序了。我们要惹芬得到我们想要的倒序,就必需加上此条语句。最后得到的结果就为:4,3;

5

总数不能被分页数整除的解决方法如果数据罪央态总数除以pagesize不为0时,那么当前的分页数是不准确的。例如,记录总数为7,pagesize为2,当count/pagesize时,page为3,余1。当你按pagsize等于2,offset=pagesize*4查询最后一条记录时,得到的结果却还是两条。所以我们要加一个判断,当count%pagesize不等于零时并且page大于或者等于pagecount时,pagsize等于1,

推荐信息