我有一个评论系统。每条评论可能会收到回复,每个回复可能会收到回复,令人生厌。循环嵌套
因此,我的数据库中包含名为“意见”具有以下重要领域表:
id
text
reply_to
...下REPLY_TO,当然,去评论的ID,它是一个答复。
所以现在问题很简单:我如何显示所有评论,但知道在每个评论必须收到回复后,每个回复后都必须回复回复等内容?
我试过最什么,以及我继续回来的,是这样的:
$query = mysql_query("SELECT * FROM comments WHERE reply_to=0");
while ($comment = mysql_fetch_array($query))
include("comment.php");
而且在comment.php,我有什么是:
foreach ($comment as $key = $value) $$key = $value;
echo $text;
echo "<div style='margin-left:30px;'>"; //A margin for a little indent
$subquery = mysql_query("SELECT * FROM comments WHERE reply_to=$id");
while ($comment = mysql_fetch_array($subquery))
include("comment.php");
echo "</div>";
但如果我正确地复制了我的代码的本质,问题是这样的:在回复第一个回复后,它回到第一个回复的第一个回复,然后是第一个回复的第一个回复的第一个回复,但是循环从来没有得到任何东西的第二个答复。因此,例如,假设表有3条评论,其中的每一个有3个答复,并且其中的每个有3篇等,上面的代码将输出:
Comment
First reply
First second-order reply
First third-order reply
...
我希望我已经解释清楚就好了。 inb4:我无法在表中添加新列。
您需要将代码打包到一个函数中,并进行递归。 http://stackoverflow.com/questions/2648968/what-is-a-recursive-function-in-php – mario
如果没有其他的东西,去睡觉,并且在你醒来后的几个小时不要考虑代码。如果你一整天都对你这么做,**会离开一段时间。** –
在循环中打一个数据库也不是一个好主意。 id在1个查询中获取所有相关注释,然后尝试使用循环/递归显示它们。 –