樹型論壇遞迴加速

來源:互聯網
上載者:User
遞迴 樹型論壇遞迴加速
一般的論壇都遞迴整個表
如果僅遞迴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.本文無著作權保護,歡迎隨意修改轉載



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。