ツリー フォーラム 再帰的アクセラレーション_PHP チュートリアル

WBOY
リリース: 2016-07-13 17:12:35
オリジナル
902 人が閲覧しました

ツリーフォーラムの再帰高速化
一般的なフォーラムはテーブル全体を再帰します
結果のみを再帰する場合、速度ははるかに速くなり、結果にアクセスすることはサーバーのメモリにアクセスすることになります。
通常は次のステートメントを通してカーソルを移動します
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

tru​​e

http://www.bkjia.com/PHPjc/629388.html

技術記事ツリー型フォーラムの再帰高速化。一般的なフォーラムは、結果のみを再帰すると、サーバーのメモリにアクセスすることになります。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート