树型论坛递归加速 一般的论坛都递归整个表 如果仅递归result,那么速度会加快不少,况且访问result是访问服务器内存. 我们一般通过下面的语句使游标移动 while($row=mysql_fetch_array($res)) 其原理是当mysql_fetch_array($res)每执行一次则游标自动下移,直到结束为止 但是递归result时,我们只有一个result,当游标不定时,我们无法知道当前游标记录是否符合我们的要求 php提供了一个函数让用户自己指定游标位置 bool mysql_data_seek ( resource result_identifier, int row_number) 这个函数大家应该能看懂吧 下面我来讲讲我的思路. 为实现论坛分页,表结构设计如下: 表名:newestbbs(最新帖子 以最后回复时间排序) 结构: id 只记录根帖的id time 如果没有回帖,则为根帖提交时间,否则为最后回帖提交时间 表名:bbs 结构: id 帖子本身的id fathered 父帖id rootid 根帖id time 发帖时间 ……….其它field 思路: 先由newestbbs得到最新帖列表(比如每页列表20条根帖 select id from newestbbs order by time limit 页数-1,20) 得到result后从整个bbs表里得到并显示所有result的根帖 while(bbs=mysql_fetch_array($result)) { select * from bbs where rootid=bbs[‘id’] order by time //(由此得到第二个result,命名为res) $root=mysql_fetch_array(res) 显示根帖 dispreplybbs($root[‘id’],$res) //递归显示此帖所有回帖 } 递归函数如下: function dispreplybbs($id,$mysqlres) { for($i=0;$i<mysql_num_rows($mysqlres);$i++) { mysql_data_seek($mysqlres,$i) //将游标移动到指定位置 bbsreply=mysql_fetch_array($mysqlres) //得到此游标位置帖子的内容 if(bbsreply[‘fatherid’]==$id) { //判断此帖的父帖id是否为给定的id //如果是则缩回显示 dispreplybbs($bbsreply[‘id’],$mysqlres)//并且再递归搜索其有没有子帖 //如果不是则判断下一条 } } //循环所有result } 如有异议,请回帖或mailto: [email protected].本文无版权保护,欢迎随意修改转载 phpfans.net收集整理 |