ツリーフォーラムの再帰高速化
一般的なフォーラムはテーブル全体を再帰します
結果のみを再帰する場合、速度ははるかに速くなり、結果にアクセスすることはサーバーのメモリにアクセスすることになります。
通常は次のステートメントを通してカーソルを移動します
while($ row= mysql_fetch_array($res))
原則として、mysql_fetch_array($res) が実行されるたびに、カーソルは最後まで自動的に下に移動します
しかし、再帰的な結果に関しては、カーソルが実行された時点で 1 つの結果しか得られません。不確実です。現在のカーソル レコードはわかりません。これは要件を満たしていますか? PHP には、ユーザーがカーソル位置を指定できる関数が用意されています。 bool mysql_data_seek (resource result_identifier, int row_number)。実装フォーラムのページネーションでは、テーブル構造は次のように設計されています:
テーブル名: 最新の投稿 (最新の投稿は最終返信時間で並べ替えられます)
構造:
id ルート投稿の ID のみを記録します
time返信がない場合はルート投稿の送信時間、そうでない場合は最後の返信投稿時間
テーブル名: bbs
構造:
投稿自体の ID ID
父親の親投稿 ID
rootid ルート投稿 ID
時間 時間 ………….その他のフィールド
アイデア:
まず、newestbbs から最新の投稿リストを取得します (各ページ リスト 20 ルート投稿など、最も新しい bbs から ID を選択して、制限時間のページ番号 -1,20 で並べます)
結果を取得した後, bbs テーブル全体からすべての結果のルート投稿を取得して表示します
while(bbs=mysql_fetch_array($result))
{C SELECT * From BBS WHERE ROOTID = BBS ['ID'] Order by Time // (from this 2 番目の結果を取得するには、名前を付けます)
$ root = mysql_fetch_array (res) $ root ['id'],$res) //この投稿へのすべての返信を再帰的に表示します
}
再帰関数は次のとおりです:
function dispreplybbs ($id,$mysqlres)
{
for($i=0;$i
mysql_data_seek($mysqlres,$i) // 指定した位置にカーソルを移動します
http://www.bkjia.com/PHPjc/629388.html
www.bkjia.com
true