ホームページ > php教程 > php手册 > ツリーフォーラムの再帰的アクセラレーション

ツリーフォーラムの再帰的アクセラレーション

WBOY
リリース: 2016-06-21 09:12:18
オリジナル
978 人が閲覧しました

再帰

ツリーフォーラムの再帰高速化
一般的なフォーラムはテーブル全体を再帰します
結果のみを再帰する場合、速度ははるかに速くなり、結果にアクセスすることはサーバーのメモリにアクセスすることになります。
通常は次のステートメントを通してカーソルを移動します
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
time 投稿時刻
…………. その他のフィールド
アイデア:
まず、最新の bbs から最新の投稿リストを取得します (各ページ リスト 20 のルート投稿など) 最新の bbs から ID を選択し、制限時間順にページ番号 -1,20 を取得します。結果を取得するには、BBS テーブル全体からすべての結果のルート投稿を取得して表示します
while(bbs=mysql_fetch_array($result))
{C SELECT * From BBS WHERE ROOTID = BBS ['ID'] Order by Time // (これから 2 番目の結果を取得するには、名前を付けます)
$ root = mysql_fetch_array (res) $ root ['id'],$res) //この投稿へのすべての返信を再帰的に表示します
}
再帰関数は次のとおりです。
function dispreplybbs($id,$mysqlres)
{
for($i=0;$i {
mysql_data_seek($mysqlres,$i) //カーソルを指定された位置 bbsreply=mysql_fetch_array($mysqlres) // カーソル位置の内容を取得します post ply['fatherid' ] == $ ID) {
// この投稿の ID が指定された ID であるかどうかを判断します
// 指定された ID である場合は償還されます
Dispreplybbs ($ bbsreply ['ID'], $ mysqlres) // 次にサブポストがあるかどうかを再帰的に検索します
// ない場合は次のポストを判断します使用する 使用するoff 's ' を使用して、再帰的に再帰的に検索して、サブ投稿があるかどうかを確認してください。自由に変更して再版してください









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