Php 在数据库中查询分层数据结构并显示结果

Php 在数据库中查询分层数据结构并显示结果,php,mysql,Php,Mysql,我想用PHP MySql在我的网站上实现高级评论系统。为此,我最终决定采用三级评论回复系统。 出于这个目的,我看到了一篇实现SQL数据库数据结构的文章 我计划对我要使用的功能使用嵌套集mdoel。评论的结构是这样的- <ul> <li>Parent comment</li> <ul> <li>First reply of parent comment</li>

我想用PHP MySql在我的网站上实现高级评论系统。为此,我最终决定采用三级评论回复系统。 出于这个目的,我看到了一篇实现SQL数据库数据结构的文章

我计划对我要使用的功能使用嵌套集mdoel。评论的结构是这样的-

<ul>
    <li>Parent comment</li>
        <ul>
            <li>First reply of parent comment</li>
            <ul>
                <li>reply of the previous reply</li>
                   <ul>
                       <li>reply of the previous reply</li>
                       <li>another reply of the previous reply</li>
                   </ul>
                <li>another reply of the previous comment</li>
             </ul>
             <li>second reply of the parent comment</li>
        </ul>
</ul>
  • 家长意见
    • 家长意见的第一次回复
      • 上一答复的答复
        • 上一答复的答复
        • 上一答复的另一答复
      • 对先前评论的另一答复
    • 家长意见的第二次回复
对于这种类型的结构,我一直在使用PHP来显示唯一地检测父对象及其子对象的查询(用于获取与每个注释相关联的用户详细信息),并按照上面显示的方式生成输出。有人知道怎么做吗。请帮帮我

编辑:

我有一个单独的SQL用户表链接到注释表,作为
user.id=comment.id
。因此,考虑到这一点,建议采用什么方法来检测每条评论的用户活动?我的意思是,例如,我想为父评论2的子评论获取用户名和电子邮件。怎么做呢?

使用“查找节点深度”中的查询,此PHP代码将创建嵌套列表

$cur_depth = -1;
while ($row = mysqli_fetch_assoc($query)) { // Loop through results of query
  if ($row['depth'] > $cur_depth) {
    echo "<ul>\n";
    $cur_depth = $row['depth'];
  }
  else while ($cur_depth > $row['depth']) {
    echo "</ul>\n";
    $cur_depth--;
  }
  echo "<li>" . $row['comment'] . "</li>\n";
}
while ($cur_depth > -1) {
  echo "</ul>\n";
  $cur_depth--;
}
$cur\u depth=-1;
while($row=mysqli\u fetch\u assoc($query)){//循环查询结果
如果($row['depth']>$cur_depth){
回声“
    \n”; $cur_depth=$row['depth']; } else while($cur_depth>$row['depth'])){ 回声“
\n”; $cur_深度--; } 回显“
  • ”$row['comment']。“
  • \n”; } 而($cur\u depth>-1){ 回声“\n”; $cur_深度--; }
    所以层次结构中最多只能有三个级别?是的,我坚持这样做。但为了时间的缘故,它可以是尽可能多的水平,因为它可以显示。我只对代码感兴趣。这不会使注释针对任何用户。我说我还必须获取每个注释的用户详细信息。必须向查询中添加额外的连接以从用户表中获取信息,等等。然后将
    $row['comment']
    替换为所有字段所需的任何格式。请编辑您的答案,注释出变量的用途以及它们的来源?我的意思是我可以猜,但是为了知识库,你能不能?我刚刚编辑了我的答案,以显示它在查询结果中循环——for循环是我用手动创建的数据进行测试时留下的。这些变量仅仅来自您引用的网站上的查询结果,除了我使用了
    注释
    而不是
    名称
    列之外。但是,您可以使用所需的任何列,以及从其他表中获取的附加列。这只是一个基本的大纲,您需要填写所有特定于应用程序的详细信息。那么,我想我的根本问题已经解决了。现在唯一剩下的算法是决定何时停止评论回复系统进行n级评论。你解决了我80%的问题。谢谢