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

时间:2012-08-19 17:49:41

标签: php mysql

我想用PHP-MySql在我的网站上实现高级评论系统。为此,我最终选择了一个3级评论 - 回复系统。 那么,为此我遇到了this文章来实现SQL数据库的数据结构。

我计划将嵌套的set 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.哇可以这样做吗?

1 个答案:

答案 0 :(得分:1)

使用“查找节点深度”中的查询,此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--;
}