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表示每个节点有两个孩子。在您的情况下,您可以决定使用n-ary树,这意味着您将使用预设大小的子数组。您的结构可能最终变得稀疏。如果发生这种情况,请更改为B+使每个子数组都有自己的大小。

请注意,您不需要为此绘制图表,因为每个人可能只有一位赞助商(即一位家长)。

于 2013-03-06T00:42:18.863 回答