我有一个 MySQL 表id
,parent
并且comment
我设法从最新到最旧几乎按原样订购。如果评论没有父级,则设置为 0。
comments
表格:表格图片
特此我当前的代码:
<?php
$con = mysqli_connect('host','username','password','database');
if (mysqli_connect_errno($con)) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$comments = array();
$results = mysqli_query($con,"SELECT * FROM comments ORDER BY id DESC");
while ($row = mysqli_fetch_assoc($results)) {
$parent = $row['parent'];
$comments[$parent ? $parent : 0][] = $row;
}
function thread($parent,$comments) {
foreach ($comments[$parent] as $post) {
echo "<div>";
echo $post['comment'];
$id = $post['id'];
if (isset($comments[$id])) {
thread($id,$comments);
}
echo "</div>";
}
}
thread(0,$comments);
?>
上面的结果按以下顺序(为了便于阅读,变成了一个列表,您可以在代码中通过将 div 标签变成 li 并在 foreach 循环周围回显 ul 标签来做到这一点):
- 第三条评论
- 第二条评论
- 对第二条评论的另一个回复
- 还有一个
- 回复第二条评论
- 回复回复
- 对第二条评论的另一个回复
- 第一条评论
- 回复第一条评论
请注意,回复也是按降序排列的,就像评论一样。除此之外,它完全没问题,并且像魅力一样工作。但这就是它应该的样子:
- 第三条评论
- 第二条评论
- 回复第二条评论
- 回复回复
- 对第二条评论的另一个回复
- 还有一个
- 回复第二条评论
- 第一条评论
- 回复第一条评论
简而言之:评论应该按降序排列,回复按升序排列。那是我完全陷入困境的地方。非常感谢你的帮助!!