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