您现在的位置: 无忧电子商务网 >> 信息学院 >> 程序开发 >> php >> 正文

树型论坛递归加速

作者:佚名    信息学院来源:整理    点击数:    更新时间:2008-2-2 我要参与讨论

 


一般的论坛都递归整个表
如果仅递归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

[1] [2] 下一页

在google里搜索更多树型论坛递归加速

Google
Web www.51ec.org
  • 上一篇信息学院:

  • 下一篇信息学院:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    我来说两句 对此文章发表了评论
      昵 称: *必填    ·注册用户·
      评 分: 1分 2分 3分 4分 5分     严禁发表危害国家安全、政治、黄色淫秽等内容的评论,用户需对自己在使用本网站服务过程中的行为承担法律责任。本站管理员有权保留或删除评论内容,评论内容只代表机友个人观点,与本网站立场无关。  
    评 论
    内 容

     
    评论列表 (最新 评论仅限网友观点!)

    供求信息




    | 设为首页 | 加入收藏 | 关于我们 | 广告服务 | 联系方式 | 友情链接 | 版权申明