因为一直接触的是mysql数据库,使用mysql中limit语句时行分页查询,所以,并没有研究过php+sql server数据库分页。对于sql server2005以上,可以使用ROW_NUMBER() OVER()进行数据库分页,但在sql server 2000就显得鸡肋了。不过,我们可以通过sql server中的top+order排序,达到limit相同的效果,但对于大数据量来说,页码越大,查询速度越慢。
sql server 2000 top+order分页方法解析――方法/步骤sql server 2000 top+order分页方法解析 1、
sql server 2000 top+order分页语句
SELECT*FROM(
SELECTTOPpagesize*FROM(--pagesize为分页的条数
SELECTTOPoffset*--offset为当前页码乘以pagesize
FROMtableorderbyfielddesc
)ast1orderby fieldasc
)ast2orderbyfielddesc
语句看起来有点复杂,其中的算法很简单,我们把语句逐个分解出来,就能明白其中算法的实现了。
sql server 2000 top+order分页方法解析 2、
第一层语句
如果有表aid name1 一2 二3 三4 四5 五6 六
我们按每页两条记录,并以为倒序排列,第二页的结果应为4,3。
查询语句应为
SELECT*FROM(
SELECTTOP 2 *FROM(--pagesize为分页的条数
SELECTTOP 2*2 *--offset为当前页码乘以pagesize
FROMtableorderbyfielddesc
)ast1orderby fieldasc
)ast2orderbyfielddesc
按最里层的语句:Select TOP 2*2 *FROMtableORDERBYfieldDESC
pagesize为2,当前页码page为2时,offset的值应为4,查询出4条记录,按id的倒序排列。返回的数据应为:6,5,4,3
sql server 2000 top+order分页方法解析 3、
第二层语句
SELECTTOP 2 *FROM()t1orderbyfieldasc
这个语句的关键就在排序上,这个select语句会对最里层的select语句得到的结果,进行逆向排序。在第一层sql语句返回的结果是:6,5,4,3,逆向排序之后:3,4,5,6。因为分页数据是pagesize等于2,top之后,得到3,4。
sql server 2000 top+order分页方法解析 4、
第三层语句
SELECT*FROM( ……)ast2orderbyfielddesc
第三层语句只是起到一个正常排序的作用,因为第二层语句把结果逆向排序了。我们要得到我们想要的倒序,就必需加上此条语句。最后得到的结果就为:4,3;
sql server 2000 top+order分页方法解析 5、
总数不能被分页数整除的解决方法
如果数据总数除以pagesize不为0时,那么当前的分页数是不准确的。例如,记录总数为7,pagesize为2,当count/pagesize时,page为3,余1。当你按pagsize等于2,offset=pagesize*4查询最后一条记录时,得到的结果却还是两条。所以我们要加一个判断,当count%pagesize不等于零时并且page大于或者等于pagecount时,pagsize等于1,