用于嵌套关联的数据结构


Data structure for nested associations

首先,请不要激怒我,因为我是编程和PHP的新手。我是一名学生,试图走出舒适的基础课程,开始我的第一个项目。我已经执行了搜索,我的问题是我甚至不知道如何说我在寻找什么,我很好奇,如果我忽略了一个简单的解决方案。我试着搜索"嵌套"或"树"的每一个变化,我认为会与这个问题有关,但我有问题找到一些东西来回答我的问题。

我正在尝试列出由嵌套树中的其他成员引用的成员,例如,如果John赞助Mary, Mike和Tom, Mike赞助Megan和Susan, Susan赞助Betty和Michelle,我希望能够显示如下内容:

  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上找到了最好的信息。谢谢大家提供的信息!

您需要的通常被称为B+ tree。每个节点都有子节点,但是子节点的数量是没有预设的。所以一个节点可能有5个子节点,而另一个有3个子节点和1个子节点。为了理解not preset的含义,将其与n-ary tree进行对比。n-ary tree是一个树,其中每个节点的子节点数量是已知的(即预设的)。例如,Bin-ary表示每个节点有两个子节点。在您的示例中,您可以决定使用n-ary树,这意味着您将使用预设大小的子数组。您的结构最终可能会变得稀疏。如果发生这种情况,请更改为B+,以便每个子数组都有自己的大小。

注意,你不需要一个图表,因为每个人可能只有一个赞助商(即一个父母)。