樹(shù)型論壇遞歸加速
發(fā)表時(shí)間:2023-07-30 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]樹(shù)型論壇遞歸加速一般的論壇都遞歸整個(gè)表如果僅遞歸result,那么速度會(huì)加快不少,況且訪問(wèn)result是訪問(wèn)服務(wù)器內(nèi)存.我們一般通過(guò)下面的語(yǔ)句使游標(biāo)移動(dòng)while(row=mysql_fetch_a...
樹(shù)型論壇遞歸加速
一般的論壇都遞歸整個(gè)表
如果僅遞歸result,那么速度會(huì)加快不少,況且訪問(wèn)result是訪問(wèn)服務(wù)器內(nèi)存.
我們一般通過(guò)下面的語(yǔ)句使游標(biāo)移動(dòng)
while($row=mysql_fetch_array($res))
其原理是當(dāng)mysql_fetch_array($res)每執(zhí)行一次則游標(biāo)自動(dòng)下移,直到結(jié)束為止
但是遞歸result時(shí),我們只有一個(gè)result,當(dāng)游標(biāo)不定時(shí),我們無(wú)法知道當(dāng)前游標(biāo)記錄是否符合我們的要求
php提供了一個(gè)函數(shù)讓用戶自己指定游標(biāo)位置
bool mysql_data_seek ( resource result_identifier, int row_number)
這個(gè)函數(shù)大家應(yīng)該能看懂吧
下面我來(lái)講講我的思路.
為實(shí)現(xiàn)論壇分頁(yè),表結(jié)構(gòu)設(shè)計(jì)如下:
表名:newestbbs(最新帖子 以最后回復(fù)時(shí)間排序)
結(jié)構(gòu):
id 只記錄根帖的id
time 如果沒(méi)有回帖,則為根帖提交時(shí)間,否則為最后回帖提交時(shí)間
表名:bbs
結(jié)構(gòu):
id 帖子本身的id
fathered 父帖id
rootid根帖id
time發(fā)帖時(shí)間
……….其它field
思路:
先由newestbbs得到最新帖列表(比如每頁(yè)列表20條根帖 select id from newestbbs order by time limit 頁(yè)數(shù)-1,20)
得到result后從整個(gè)bbs表里得到并顯示所有result的根帖
while(bbs=mysql_fetch_array($result))
{
select * from bbs where rootid=bbs[‘id’] order by time //(由此得到第二個(gè)result,命名為res)
$root=mysql_fetch_array(res)
顯示根帖
dispreplybbs($root[‘id’],$res) //遞歸顯示此帖所有回帖
}
遞歸函數(shù)如下:
function dispreplybbs($id,$mysqlres)
{
for($i=0;$i<mysql_num_rows($mysqlres);$i++)
{
mysql_data_seek($mysqlres,$i) //將游標(biāo)移動(dòng)到指定位置
bbsreply=mysql_fetch_array($mysqlres) //得到此游標(biāo)位置帖子的內(nèi)容
if(bbsreply[‘fatherid’]==$id)
{
//判斷此帖的父帖id是否為給定的id
//如果是則縮回顯示
dispreplybbs($bbsreply[‘id’],$mysqlres)//并且再遞歸搜索其有沒(méi)有子帖
//如果不是則判斷下一條
}
} //循環(huán)所有result
}
如有異議,請(qǐng)回帖或mailto: chensiping@163.net.本文無(wú)版權(quán)保護(hù),歡迎隨意修改轉(zhuǎn)載