程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 樹型論壇遞歸加速

樹型論壇遞歸加速

編輯:關於PHP編程

樹型論壇遞歸加速
一般的論壇都遞歸整個表
如果僅遞歸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) //將游標移動到指定位置

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved