万擎电子商务常用类库--PHP+MSSQLSERVER 分页篇

发布日期:2008-06-24    浏览次数:

    虽然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']));

相关内容:

正在拉取内容......