怎么实现如CSDN这样的分页? 对于不同DBMS,PHP必须用不同的方法MYSQL:利用LIMIT子句SELECT * FROM 表名 WHERE 条件 ORDER BY 字段 DESC LIMIT M,N从第M条记录选N条 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 但是我要使用sql server数据库,它不支持limit呀,怎么办? 是这样,因为我要显示的记录非常多,可能多上千条,如果把这些全部读到数组里,怕是内存不够,我想有没有好的解决办法?我相信CSDN一定不是这么做的。 RecordSet的Open方式有很多,某些可以支持分页,就是不知道PHP具体怎么实现。 to mastercat: 我一直用MySQL,因为在我的使用情况来看,MySQL要比SQL Server快,你的问题我倒是没有研究过,不过我有一篇关于“分页显示oracle数据库记录的类”的文章,你自己看看。-------------------------------------------<?php /********************************************* TOracleViewPage v 1.0 分页显示Oracle数据库记录的类 作者:sharetop email:[email protected] ***********************************************/ class TOracleViewPage { var $Table; //表名 var $MaxLine; //每页显示行数 var $LinkId; var $Id; var $Offset; //记录偏移量 var $Total; //记录总数 var $Number; //本页读取的记录数 var $Result; //读出的结果 var $TPages; //总页数 var $CPages; //当前页数 var $TGroup; var $PGroup; //每页显示的页号个数 var $CGroup; var $Condition; //显示条件 如:where id='$id' order by id desc var $PageQuery; //分页显示要传递的参数 //******构造函数************* //参数:表名、最大行数、分页参考的字段、每页显示的页号数 function TOracleViewPage($TB,$ML,$ID){ global $offset; $this->Table=$TB; $this->MaxLine=$ML; $this->Id=$ID; if(isset($offset)) $this->Offset=$offset; else $this->Offset=0; $this->Condition=""; $this->PageQury=NULL; } function InitDB($user,$password,$db){ if (PHP_OS == "WINNT") $dllid=dl("php3_oci80.dll"); $this->LinkId = OCILogon($user,$password,$db); } function Destroy(){ OCILogoff($this->LinkId); } //********设置显示条件********* //如:where id='$id' order by id desc //要求是字串,符合SQL语法(本字串将加在SQL语句后) function SetCondition($s){ $this->Condition=$s; } function SetNumGroup($pg){ $this->PGroup=$pg; } //******设置传递参数************ // key参数名 value参数值 // 如:setpagequery("id",$id);如有多个参数要传递,可多次调用本函数。 function SetPageQuery($key,$value){ $tmp[key]=$key; $tmp[value]=$value; $this->PageQuery[]=$tmp; } //********读取记录*************** // 主要工作函数,根据所给的条件从表中读取相应的记录 // 返回值是一个二维数组,Result[记录号][字段名] function ReadList() { $SQL="SELECT Count(*) AS total FROM ".$this->Table." ".$this->Condition; $stmt = OCIParse($this->LinkId,$SQL); $bool = OCIExecute($stmt); if (!$bool) { echo "连接失败!"; OCILogoff($this->LinkId); exit; } else { OCIFetch($stmt); $this->Total=OCIResult($stmt,1); } /*****此句要求ID为连续的。 $SQL="SELECT * FROM ".$this->Table." ".$this->Condition. " WHERE ".$this->Id." BETWEEN ".$this->Offset." AND ".($this->Offset+$this->MaxLine-1); ******/ $SQL="SELECT * FROM ".$this->Table." ".$this->Condition." ORDER BY ".$this->Id; $stmt = OCIParse($this->LinkId,$SQL); $bool = OCIExecute($stmt); if (!$bool) { echo "连接失败!"; OCILogoff($this->LinkId); exit; } else { $ncols = OCINumCols($stmt); for ( $i = 1; $i <= $ncols; $i++ ) $column_name[$i] = OCIColumnName($stmt,$i); $k=0; //while(OCIFetch($stmt)) { 此句与上句一样,要求ID为连续。 for($j=0;$j<$this->Offset;$j++) OCIFetch($stmt); for($j=0;$j<$this->MaxLine;$j++){ if(OCIFetch($stmt)){ $k++; for($i=1;$i<=$ncols;$i++) $temp[$column_name[$i]]=OCIResult($stmt,$i); $this->Result[]=$temp; } else break; } $this->Number=$k; OCILogoff($this->LinkId); } return $this->Result; } //************取总页数及当前页************* function GetPage(){ $this->TPages=ceil($this->Total/$this->MaxLine); $this->CPages=ceil($this->Offset/$this->MaxLine)+1; } //**********显示页数************* //显示当前页及总页数 function ThePage() { echo "第".$this->CPages."页/共".$this->TPages."页"; } //**********显示翻页按钮************* //此函数要在getPage()函数之后调用!!! //显示首页、下页、上页、未页,并加上要传递的参数 function Page() { $first=0; $next=$this->Offset+$this->MaxLine; $prev=$this->Offset-$this->MaxLine; $last=($this->TPages-1)*$this->MaxLine; $k=count($this->PageQuery); $strQuery=""; //生成一个要传递参数字串 for($i=0;$i<$k;$i++){ $strQuery.="&".$this->PageQuery[$i][key]."=".$this->PageQuery[$i][value]; } if($this->Offset>=$this->MaxLine) echo "<A href=$PHP_SELF?offset=".$first.$strQuery.">首页</A>|"; else echo "首页|"; if($prev>=0) echo "<A href=$PHP_SELF?offset=".$prev.$strQuery.">上一页</A>|"; else echo "上一页|"; if($next<$this->Total) echo "<A href=$PHP_SELF?offset=".$next.$strQuery.">下一页</A>|"; else echo "下一页|"; if($this->TPages!=0 && $this->CPages<$this->TPages) echo "<A href=$PHP_SELF?offset=".$last.$strQuery.">末页</A>"; else echo "末页"; } //*******取分组信息******* function GetGroup() { $this->TGroup=ceil($this->TPages/$this->PGroup); $this->CGroup=ceil($this->CPages/$this->PGroup); } //******分组显示页号****** //显示如:1 2 3 4 function NumPage() { $first=($this->CGroup-1)*($this->PGroup)+1; $last=($first+$this->PGroup > $this->TPages)? ($this->TPages+1):($first+$this->PGroup); $pr=($this->CGroup-2>=0)?( ($this->CGroup-2)*($this->PGroup)+1 ):(-1); $prev=($pr!=-1)?( ($pr-1)*$this->MaxLine):(0); $ne=($this->CGroup*$this->PGroup+1<=$this->TPages)?($this->CGroup*$this->PGroup+1):(-1); $next=($ne!=-1)?( ($ne-1)*$this->MaxLine):(0); $k=count($this->PageQuery); $strQuery=""; //生成一个要传递参数字串 for($i=0;$i<$k;$i++){ $strQuery.="&".$this->PageQuery[$i][key]."=".$this->PageQuery[$i][value]; } if($first!=1) echo "<a href=$PHP_SELF?offset=".$prev.$strQuery."> << </a>"; for($i=$first;$i<$last;$i++) { if($this->CPages!=$i){ $current=($i-1)*$this->MaxLine; echo "<a href=$PHP_SELF?offset=".$current.$strQuery.">".$i."</a> "; } else echo $i." "; } if($ne!=-1) echo "<a href=$PHP_SELF?offset=".$next.$strQuery."> >> </a>"; } //******end class } ?> sql server 的php分页是使用cursor的 这样的递归怎么做?! mysql_query错误,求解 新手求教 整站是GB2312编码,通过ajax把数据加入数据库,用echo输出会乱码该怎么办? 介绍给大家一个好的看代码的软件: SourceFormatX 谁能提供一个phpmyadmin中文的下载呀 我怎么把我的mysql数据库放到网上去?急!马上结帖!谢谢! 繁简转换的一个问题。。。。 请问php怎样调用sp,还有就是mysql支持sp吗? 小白学习Thinkphp框架一 谁能告诉我到哪儿去找php.exe 头疼问题:我的session还是不能用,急死了!
我一直用MySQL,因为在我的使用情况来看,MySQL要比SQL Server快,你的问题我倒是没有研究过,不过我有一篇关于“分页显示oracle数据库记录的类”的文章,你自己看看。-------------------------------------------
<?php /*********************************************
TOracleViewPage v 1.0 分页显示Oracle数据库记录的类 作者:sharetop
email:[email protected] ***********************************************/
class TOracleViewPage { var $Table; //表名
var $MaxLine; //每页显示行数 var $LinkId;
var $Id; var $Offset; //记录偏移量
var $Total; //记录总数
var $Number; //本页读取的记录数
var $Result; //读出的结果 var $TPages; //总页数
var $CPages; //当前页数 var $TGroup;
var $PGroup; //每页显示的页号个数
var $CGroup; var $Condition; //显示条件 如:where id='$id' order by id desc
var $PageQuery; //分页显示要传递的参数
//******构造函数*************
//参数:表名、最大行数、分页参考的字段、每页显示的页号数 function TOracleViewPage($TB,$ML,$ID){
global $offset; $this->Table=$TB;
$this->MaxLine=$ML;
$this->Id=$ID; if(isset($offset)) $this->Offset=$offset;
else $this->Offset=0; $this->Condition="";
$this->PageQury=NULL;
} function InitDB($user,$password,$db){
if (PHP_OS == "WINNT") $dllid=dl("php3_oci80.dll");
$this->LinkId = OCILogon($user,$password,$db);
} function Destroy(){
OCILogoff($this->LinkId);
} //********设置显示条件*********
//如:where id='$id' order by id desc
//要求是字串,符合SQL语法(本字串将加在SQL语句后) function SetCondition($s){
$this->Condition=$s;
} function SetNumGroup($pg){
$this->PGroup=$pg;
} //******设置传递参数************
// key参数名 value参数值
// 如:setpagequery("id",$id);如有多个参数要传递,可多次调用本函数。 function SetPageQuery($key,$value){
$tmp[key]=$key; $tmp[value]=$value;
$this->PageQuery[]=$tmp;
} //********读取记录***************
// 主要工作函数,根据所给的条件从表中读取相应的记录
// 返回值是一个二维数组,Result[记录号][字段名] function ReadList() {
$SQL="SELECT Count(*) AS total FROM ".$this->Table." ".$this->Condition; $stmt = OCIParse($this->LinkId,$SQL);
$bool = OCIExecute($stmt);
if (!$bool) {
echo "连接失败!";
OCILogoff($this->LinkId);
exit;
}
else {
OCIFetch($stmt);
$this->Total=OCIResult($stmt,1);
}
/*****此句要求ID为连续的。
$SQL="SELECT * FROM ".$this->Table." ".$this->Condition.
" WHERE ".$this->Id." BETWEEN ".$this->Offset." AND ".($this->Offset+$this->MaxLine-1);
******/ $SQL="SELECT * FROM ".$this->Table." ".$this->Condition." ORDER BY ".$this->Id; $stmt = OCIParse($this->LinkId,$SQL);
$bool = OCIExecute($stmt);
if (!$bool) {
echo "连接失败!";
OCILogoff($this->LinkId);
exit;
}
else {
$ncols = OCINumCols($stmt);
for ( $i = 1; $i <= $ncols; $i++ )
$column_name[$i] = OCIColumnName($stmt,$i);
$k=0; //while(OCIFetch($stmt)) { 此句与上句一样,要求ID为连续。 for($j=0;$j<$this->Offset;$j++) OCIFetch($stmt);
for($j=0;$j<$this->MaxLine;$j++){
if(OCIFetch($stmt)){
$k++;
for($i=1;$i<=$ncols;$i++)
$temp[$column_name[$i]]=OCIResult($stmt,$i);
$this->Result[]=$temp;
}
else break;
}
$this->Number=$k;
OCILogoff($this->LinkId); }
return $this->Result;
} //************取总页数及当前页************* function GetPage(){
$this->TPages=ceil($this->Total/$this->MaxLine);
$this->CPages=ceil($this->Offset/$this->MaxLine)+1;
} //**********显示页数*************
//显示当前页及总页数 function ThePage() {
echo "第".$this->CPages."页/共".$this->TPages."页";
} //**********显示翻页按钮*************
//此函数要在getPage()函数之后调用!!!
//显示首页、下页、上页、未页,并加上要传递的参数 function Page() {
$first=0;
$next=$this->Offset+$this->MaxLine;
$prev=$this->Offset-$this->MaxLine;
$last=($this->TPages-1)*$this->MaxLine; $k=count($this->PageQuery);
$strQuery=""; //生成一个要传递参数字串
for($i=0;$i<$k;$i++){
$strQuery.="&".$this->PageQuery[$i][key]."=".$this->PageQuery[$i][value];
} if($this->Offset>=$this->MaxLine)
echo "<A href=$PHP_SELF?offset=".$first.$strQuery.">首页</A>|";
else echo "首页|"; if($prev>=0)
echo "<A href=$PHP_SELF?offset=".$prev.$strQuery.">上一页</A>|";
else
echo "上一页|"; if($next<$this->Total)
echo "<A href=$PHP_SELF?offset=".$next.$strQuery.">下一页</A>|";
else
echo "下一页|"; if($this->TPages!=0 && $this->CPages<$this->TPages)
echo "<A href=$PHP_SELF?offset=".$last.$strQuery.">末页</A>";
else
echo "末页";
} //*******取分组信息******* function GetGroup() {
$this->TGroup=ceil($this->TPages/$this->PGroup);
$this->CGroup=ceil($this->CPages/$this->PGroup);
} //******分组显示页号******
//显示如:1 2 3 4 function NumPage() {
$first=($this->CGroup-1)*($this->PGroup)+1;
$last=($first+$this->PGroup > $this->TPages)? ($this->TPages+1):($first+$this->PGroup);
$pr=($this->CGroup-2>=0)?( ($this->CGroup-2)*($this->PGroup)+1 ):(-1);
$prev=($pr!=-1)?( ($pr-1)*$this->MaxLine):(0);
$ne=($this->CGroup*$this->PGroup+1<=$this->TPages)?($this->CGroup*$this->PGroup+1):(-1);
$next=($ne!=-1)?( ($ne-1)*$this->MaxLine):(0); $k=count($this->PageQuery);
$strQuery=""; //生成一个要传递参数字串
for($i=0;$i<$k;$i++){
$strQuery.="&".$this->PageQuery[$i][key]."=".$this->PageQuery[$i][value];
} if($first!=1)
echo "<a href=$PHP_SELF?offset=".$prev.$strQuery."> << </a>";
for($i=$first;$i<$last;$i++) {
if($this->CPages!=$i){
$current=($i-1)*$this->MaxLine;
echo "<a href=$PHP_SELF?offset=".$current.$strQuery.">".$i."</a> ";
}
else echo $i." ";
}
if($ne!=-1)
echo "<a href=$PHP_SELF?offset=".$next.$strQuery."> >> </a>";
} //******end class
}
?>