mysqlにツリーを保存するためのアルゴリズムはいくつかありますが、リレーショナルデータベースはこのために設計されていないため、これは根本的に間違っているように思われます。 特定のmongoDBでNoSQLを使用することについてどう考えましたか? それは簡単です、彼らは私にインタビューを求めました:
ツリーを構築する方法は?
私は答えた:
mongodbとそこからツリーのあるドキュメントを取り出します
彼らは私に電話をかけませんでしたが、私は今mongoDBを勉強していて、Mysqlが好きではないことに気を悪くしていません(残念ながら、または残念ながらわかりません)。 一般的に、それがすべてどのように機能するか見てみましょう? phpで記述されたコメントツリーの例。
コードをすぐに提供します。
したがって、保存するパスはパス変数に渡されます。たとえば、mongoにコメントがあります。これを「クリーン」な配列と考えてください。実際には、これはオブジェクトの配列なので、すべてを配列に単純化します。
1つのコメント配列 array ( 'name' => 'test', 'comment' => 'test comment', );
更新後、pushおよびpath = 'reply'変数を使用して、配列は次の形式になります。
プッシュ後の配列 array ( 'name' => 'test', 'comment' => 'test comment', 'reply' => array ( [0] => array( 'name' => 'test reply test' 'comment' => 'test comment reply' ) ) );
添付されたコメントに応答すると、パスは「reply.0.reply」という形式になります。つまり、コメントの応答で、0要素を取得し、データを含む新しい応答フィールドを挿入します。操作の後、次の配列を取得します。
ネストされたコメントのレプリカを持つ配列 array ( 'name' => 'test', 'comment' => 'test comment', 'reply' => array ( [0] => array( 'name' => 'test reply test' 'comment' => 'test comment reply' 'reply' => array ( [0] => array( 'name' => 'test reply test' 'comment' => 'test comment reply' ) ) ) ) );
そして、それがすべて、アルゴリズム全体です。単にこの配列を挿入して、そのままレンダリングするために使用します。 レンダリングはそれほど重要な部分ではないので、ペイントしません。もちろん、print_r()を使用して冗談として行いますが、原則は同じです。ご愛顧の皆様、ありがとうございます。
PS:例では、アルゴリズムが提示されており、それは仮定、すなわちコメントのソートの欠如とその永続性を持っています。