虽然PHP+MYSQL是一对黄金搭档,但是,MYSQL本身在企业级服务上,仍缺乏便捷性及稳定性(尤其使用MYISAM引擎的时候),所以,在WIN平台上,又有了一种不错的搭配:PHP + MSSQL。使用MSSQL的时候,使用的是PHP自带的MSSQL接口函数。与MYSQL大多都是大同小异,但是在分页上,却存在很大的区别。主要是因为在MYSQL中有LIMIT可用,而在MSSQL中却只能通过移动游标的方式来实现。
现在网上大多是ASP + MSSQL的分页方式,即查询所有记录,然后移动游标,这样做的结果是在数据量大的时候会造成分页速度慢。万擎电子商务对此问题做了分析,使用了MSSQL的TOP进行检索,这样即使数据量再大,也不会影响数据分页速度。但是在页码越大的情况下,会造成速度越慢,但是从用户角度分析,采取倒序方式排列的数据,一般用户很少会不断的去点击后面的分页。
以下是DB类下的GRID方法:
method grid: /** * grid($sql,$pagesize) * **/ public static function grid($countTotalSql,$sql,$pagesize,$page){ $result=self::query($countTotalSql); $records_total=db::result($result,0); //计算总页数 $page_total=ceil($records_total/$pagesize); $page=intval($page)>$page_total?$page_total:$page; $page=$page>0?$page:1; //计算起点 $start=($page-1)*$pagesize; //计算top $topvalue=$start + $pagesize; $sql=str_replace('{top}'," top $topvalue ",$sql); //doit::debug($sql); //执行主数据查询SQL //echo $sql; $result=db::query($sql); db::dataSeek($result,$start);//将数据集中的游标进行调整到start位置 $tarray=array('result'=>$result,'nav'=>'123'); return $tarray; } |
前端调用(其中的{top}类似bind方法):
前端调用: $countTotalSql="select count(id) from eceye_contents"; $sql="select {top} id,subject_id,ar_title from eceye_contents order by id desc"; $array=db::grid($countTotalSql,$sql,3,intval($_GET['page'])); |