离开济南三个多月了,时常会想起乔老师与同学们。于是经常到road2lamp.com上逛逛,多了解一下培训班里的动态。
来北京后进一家行业门户网站,这家公司以前一直用ASP+SQL SERVER2000的架构,我发现其中有一个xx模板,在检索数据时,慢得令人无耐,仔细分析了一下ASP源码与数据表,发现慢在了分页上,默认情况下会检索几千万行数据,使用传统的ADO来分页,必然会效率大减。于是我想到了MySql中的 LIMIT ,但是在sqlserver中并没有 LIMIT,想了一下午,终于想出来一个较好的分页方法,索性用PHP将分页显示部分重写一遍,执行一下,果然速度大幅提高。
考虑到同学们以后有可能会遇到 PHP连接非MYSQL,现将本人写的分页函数贴上来,请乔老师与同学们指正!
page.inc.php
------------------------------------------------------------------------------------------------------------------------
//在PHP里操作 MSSQL 的通用分页函数
function page($curpage,$sql,$pers=100){ //传入请求页码,SQL语句,每页记录数,返回取得结果集和分页HTML代码段
$sql = str_replace("select","select top {$pers} ",$sql); //原SQL语句
$rowcount = mssql_query("select count(*) ".strstr($sql,'from'));
$rscount = mssql_result($rowcount,0,0); //得到总记录数
$pagecount = ceil($rscount/$pers); //得到总页数
if($curpage<1 || !isset($curpage)){
$curpage = 1;
}elseif($curpage > $pagecount){
$curpage = $pagecount;
}
$cpe = $curpage;
$offpage = ($cpe=$cpe-1) * $pers; //偏移量
//构造子SQL语句
$sub_sql = " where a.id not in(select top {$offpage} a.id ".strstr($sql,'from').") and ";
$sql = str_replace("where",$sub_sql,$sql);
$row_info = array();
$row_info['rs'] = @mssql_query($sql); //得到欲返回的结果集
if($curpage>1){
$page4 = "首页";
}else{
$page4 = "首页";
}
$row_info['page'] = "当前页码:第{$curpage}页, 共{$pagecount}页,{$rscount}条记录,{$page4} ";
if($curpage>1){
$pg = $curpage-1;
$page1 = "上一页";
}else{
$page1 = "上一页";
}
if($curpage < $pagecount){
$pg =$curpage+1;
$page2 = "下一页";
}else{
$page2= "下一页";
}
if($curpage < $pagecount){
$page5 = "尾页";
}else{
$page5 = "尾页";
}
$row_info['page'] .= $page1."/".$page2." ".$page5; //构造分页链接文本
return $row_info;
}
?>
------------------------------------------------------------------------------------------------------------------------
注:gotopage是前台的JS函数,这个可以自己更改



