0

まず、私はプログラミングと PHP に不慣れなため、私を炎上させないでください。私は教室で基礎の快適さの外に出て、最初のプロジェクトに取り組もうとしている学生です。私は検索を実行しましたが、私の問題は、探しているものをどのように表現すればよいかさえわからず、簡単な解決策を見落としているかどうかに興味があることです. この問題に関連すると思われる「ネストされた」または「ツリー」のすべてのバリエーションを検索しようとしましたが、私の質問に答えるものを見つけるのに問題があります。

ネストされたツリーの他のメンバーによって参照されたメンバーをリストしようとしています。たとえば、ジョンがメアリー、マイクを後援し、トムとマイクがミーガンとスーザンを後援し、スーザンがベティとミシェルを後援した場合、次のようなものを表示できるようにしたいと考えています。

  1. ジョン
    • メアリー
    • マイク
      • ミーガン
      • スーザン
        • ベティ
        • ミシェル
    • トム

たとえば、必要に応じて 5 レベルの深さだけを表示する必要があるなど、検索する深さを指定できるようにしたいと考えています。このために、私は考えていましたfor (i=0;i<=4;i++)

$query = "SELECT fname, lname, user_id FROM USER WHERE sponsor_id = (SELECT user_id FROM USER WHERE username = '$_SESSION[username]')";
$result = mysqli_query($con, $query); 

while ($row = mysqli_fetch_row($result)) {
  echo "<ul><li>$row[0] $row[1]</li>";
  $subquery = "SELECT fname, lname, user_id FROM USER WHERE sponsor_id = '$row[2]'";
  $subresult = mysqli_query($con, $subquery);
  while ($row2 = mysqli_fetch_row($subresult)) {
    echo "<ul><li>$row2[0] $row2[1]</li></ul>";
  }     
}

これは、正確に機能しなかった一般的な必要な構造を把握するための私の最後の試みでした。これをさらに深くしてネストを続けたい場合は、任意のレベルでこれを機能させることができると確信していますが、100 レベルを返したい場合はどうすればよいでしょうか...私が見落としている単純な構造があるようです。

私が探しているものを検索する方法を知っていれば、これを説明するのに役立つリンクさえあれば、どんなガイダンスでも大歓迎です。


皆さんのコメントを読んで、いろいろ検索した結果、答えを見つけました。私が探しているのは、隣接リストまたはクロージャ テーブルです。これについて私が見つけた最良の情報はhttp://www.slideshare.net/billkarwin/models-for-hierarchical-dataにあります。みんな情報ありがとう!

4

1 に答える 1

0

必要なものは通常 と呼ばれますB+ tree。各ノードには子がありますが、子の数は事前設定されていません。したがって、あるノードには 5 つの子があり、別のノードには 3 つの子があり、別のノードには 1 つの子がありnot presetますn-ary tree。Ann-ary treeは、ノードごとの子の数が既にわかっている (つまり、事前に設定されている) ツリーです。たとえば、Bin-ary各ノードには 2 つの子があることを意味します。あなたの場合、n-aryツリーを使用することを決定できます。これは、事前設定されたサイズの子の配列を使用することを意味します。あなたの構造はまばらになるかもしれません。B+その場合は、各子配列が独自のサイズになるように変更します。

各人には 1 人のスポンサー (つまり、1 人の親) しかいないため、グラフは必要ないことに注意してください。

于 2013-03-06T00:42:18.863 に答える