【发布时间】:2012-05-09 19:29:04
【问题描述】:
我正在尝试像 Disqus 一样创建一个评论线程。我无法在 PHP 中设置逻辑以显示 cmets,以便可以回复每条评论,然后这些 cmets 将保持相互连接。
这是我的 MySQL cmets 表:
comment_id comment item_id replied_to_id time
1 hello1 1 1 1:00pm
2 hello2 1 1 2:00pm
3 hello3 1 3 3:00pm
4 hello4 2 4 4:00pm
5 hello5 1 2 2:00pm
6 hello6 1 3 6:00pm
item_id 是一列,表示 cmets 正在讨论的父项。
如果我从我的数据库中提取所有带有 item_id=1 的 cmets,那么我不确定如何对它们进行线程化以使 comment_id 和 replied_to_id 得到适当匹配。例如,comment_id=2 应与 comment_id=1 匹配。
这是我的 PHP:
<?foreach($comments as $row){
if($row->comment_id==$row->replied_to_id){
echo $row->comment."-".$row->time; //desired output: hello1-1:00pm
foreach($comments as $sub_row){
if($row->comment_id!=$sub_row->replied_to_id){
echo $sub_row->comment."-".$sub_row->time;// desired output: hello2-2:00pm
foreach($comments as $sub_sub_row){
if($row->comment_id!=$sub_sub_row->replied_to_id){
echo $sub_sub_row->comment."-".$sub_sub_row->time;// desired output: hello5-5:00pm
}
}
}
}
}
else{
echo $row->comment."-".$row->time; // desired output: hello3-3:00pm
}
}
这看起来不对。必须有更好的方法来做到这一点。
【问题讨论】:
-
魔术关键字是recursion。当然,为此,您首先必须了解递归... :o)
-
感谢 Deceze,我认为递归是关键,但不确定如何根据我的参数设置一个简单的演示。你能帮忙吗?
标签: php mysql if-statement foreach