php sqlserver分页,php+sqlserver分页

问:

听朋友说php+sqlserver分页很麻烦,今天研究了一下,发现其实比php+mysql还简单(实际上mysql也可以这样)。

下面这个函数就是取出符合纪录的第$page页的纪录到数组:

function selectPage($QueryStr,$page,$pageSize)

{

$R=@mssql_query($QueryStr);

if ($R){

$totalPage =

ceil(mssql_num_rows($R)/$pageSize);

if

(!$page||$page<=0) $page=1;

if

($page>$totalPage) $page=$totalPage;

$begin = (

$page-1 ) * $pageSize;

$ReArr=array();

$index=0;

if($pageSize>0)

mssql_data_seek($R,$begin);

while($ResultArr=@mssql_fetch_array($R)){

if($pageSize>0)

if($index>$pageSize-1)

break;

$ReArr[$index]=$ResultArr; $index++;

}

return

$ReArr;

}else

return

false;

}

我觉得这样只用查询一次,用limit还有查询两次。实际上asp就是用这种方式!

欢迎各位提出意见

______________________________________________________________________________________________

答1:

好,鼓励

______________________________________________________________________________________________

答2:

哈哈,我太高兴了

能得到秋水JJ的鼓励,我真是激动万分,眼泪都流出来了...

______________________________________________________________________________________________

答3:

不会吧,只有秋水识货???

这个问题以前可是有很多人问的,但都没有什么好答案

欢迎大家继续提供思路和建议

______________________________________________________________________________________________

答4:

我根据以前宇凡写的一个分页控制类写了一个,和他的那个极其相似:)

______________________________________________________________________________________________

答5:

//-----------------------

// 通用分页控制……

// 21bird 2002.8.22

//-----------------------

//class pagecontrol

class pagecontrol{

//properties

var $m_RecordAmount;

var $m_PageAmount;

var $m_currPage = 1;

var $RecordRow_Per_aPage = 10;

var $m_nextPage;

var $m_prevPage;

var $m_usingIndex;

var $m_startIndex;

var $r;

//methods

function pagecontrol($r, $RecordAmount,

$p)

{

$this->r

= $r;

if (($p ==

"") || (round($p) == 0)){

$p=1;

}

$this->m_currPage = $p;

$this->m_RecordAmount = $RecordAmount;

$this->m_PageAmount =

Ceil($this->m_RecordAmount/$this->RecordRow_Per_aPage);

$this->m_startIndex = ($this->m_currPage - 1) *

$this->RecordRow_Per_aPage;

$this->m_usingIndex = $this->m_startIndex;

//calulate

the current page

if($this->m_currPage != $this->m_PageAmount)

$this->m_nextPage = $this->m_currPage + 1;

else

$this->m_nextPage = $this->m_PageAmount;

if($this->m_currPage != 1)

$this->m_prevPage = $this->m_currPage - 1;

else

$this->m_prevPage = 1;

}

function Next_Record()

{

if(($this->m_usingIndex != $this->m_RecordAmount - 1)||

($this->m_usingIndex <

($this->RecordRow_Per_aPage)))

{

$this->m_usingIndex ++;

$result = 1;

}

else

$result = 0;

return

$result;

}

function link_first()

{

echo "

href=\"" . $_SERVER['PHP_SELF'] . "?p=1\">首页

";

}

function link_last()

{

echo "

href=\"" . $_SERVER['PHP_SELF'] . "?p=" . $this->m_PageAmount .

"\">尾页

";

}

function link_prev()

{

echo "

href=\"" . $_SERVER['PHP_SELF'] . "?p=" .$this->m_prevPage .

"\">前页

";

}

function link_next()

{

echo "

href=\"" . $_SERVER['PHP_SELF'] . "?p=" .$this->m_nextPage .

"\">后页

";

}

function link_any()

{

echo

"

"\">直接到页

type=submit value = 'Go!!!'>

";

}

function getCurrent()

{

mssql_data_seek($this->r, $this->m_usingIndex);

list($result) = mssql_fetch_array($this->r);

return

$result;

}

}

?>

凑个热闹^_*

______________________________________________________________________________________________

答6:

那个$r是执行sql之后建立的数据库连接id。

下面是使用这个类的……

include("pagecontrol.php");

//中间的自己写吧^_^

$sql = "select * from

main_log";

$r = mssql_query($sql,

$log_db->Link_id);

$rows =

mssql_num_rows($r);

$aCtrl = new pagecontrol($r,

$rows, $HTTP_GET_VARS["p"]);

echo "
总记录数=" .

$aCtrl->m_RecordAmount;

echo "
总页数=" .

$aCtrl->m_PageAmount;

echo "
当前页=" .

$aCtrl->m_currPage;

echo "
每页记录数=" .

$aCtrl->RecordRow_Per_aPage;

echo "
下一页=" .

$aCtrl->m_nextPage;

echo "
上一页=" .

$aCtrl->m_prevPage;

echo "
正在使用索引="

. $aCtrl->m_usingIndex;

echo "
本页开始索引="

. $aCtrl->m_startIndex;

echo

"
";

$aCtrl->link_first();

echo " ";

$aCtrl->link_prev();

echo " ";

$aCtrl->link_next();

echo " ";

$aCtrl->link_last();

echo " ";

$aCtrl->link_any();

echo " ";

echo "

";

while($aCtrl->Next_Record())

{

$UsingIndex=$aCtrl->UsingIndex+1;

$aRow = $aCtrl->getCurrent();

echo display_digital(21474836471);

echo $aRow["id"] . "
";

echo $aRow["name"] . "
";

echo "

";

}

?>

to 楼主:你这样好像会执行sql 多次……

______________________________________________________________________________________________

答7:

原来已经有了。不错

______________________________________________________________________________________________

答8:

你没有看懂我的程序或者意思,绝对只有一次查询

我把当前页面应该显示的纪录全部集中到了数组中了,并作为返回值返回了这个数组!

______________________________________________________________________________________________

答9:

在MSSQL的mssql_query($string,$int);

其中$string可以是SQL

SERVER存储过程的调用.这样就要自己写一个类似于limit的存储过程,在SQL

SERVER他虽有TOP这项功能,但它的翻页,我们那时有个写VB的同事封装了一个用游标翻页的存储过程,由于年事以久,且不是自己封装的所一存储过程的代码找不见了,现在说一下调用过程,望能引发大家的一些思维:应该不是误导^_^

$string="exec web_ScrollPage

'fo03t001','complex,description,isroomreqd,isexcludegrp,isautoassign','complex,description,isroomreqd,isexcludegrp,isautoassign',".$PAGE_ROWS.",".$AddValue;

exec web_ScrollPage

'fo03t001',---这一段是掉用存储过程,及所要访问的table

'complex,description,isroomreqd,isexcludegrp,isautoassign',----要读的字段

'complex,description,isroomreqd,isexcludegrp,isautoassign',----存储过程中建立临时表所要的字段

".$PAGE_ROWS.",".$AddValue-----每页的行数,及开始的位置

在存储过程中是先建临时表,移游标到$AddValue所在的位置,然后移动游标一条条将记录读到临时表里,最后再读一次临时,删掉临时表,就这样是不是很烦.

不过在读大量数据是用数组翻页就不如这样了^_^

______________________________________________________________________________________________

答10:

楼上的,谢谢,这种方法我在asp高级编程中见到过,上面有原原本本的存储过程代码,不过我觉得这种方法没有我的方法好。可能在asp中比较好

______________________________________________________________________________________________

答11:

vivanboy(我是谁?):

是呀,我在忙着呢,没细看:(

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值