<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      樹型論壇遞歸加速

      [摘要]樹型論壇遞歸加速一般的論壇都遞歸整個表如果僅遞歸result,那么速度會加快不少,況且訪問result是訪問服務器內存.我們一般通過下面的語句使游標移動while(row=mysql_fetch_a...
      樹型論壇遞歸加速
      一般的論壇都遞歸整個表
      如果僅遞歸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: chensiping@163.net.本文無版權保護,歡迎隨意修改轉載




      日韩精品一区二区三区高清