У меня есть система комментариев. Каждый комментарий может получать ответы, и каждый ответ может получать ответы ad nauseam.
Таким образом, моя база данных содержит таблицу с именем «comments» со следующими важными полями:
id
text
reply_to
... в поле reply_to, конечно, указывается идентификатор комментария, на который он является ответом.
Итак, теперь проблема проста: как отобразить все комментарии, но зная, что после каждого комментария должны приходить ответы на него, а после каждого ответа должны приходить ответы на ответ и т. Д.?
То, что я пробовал больше всего и к чему я все время возвращаюсь, выглядит примерно так:
$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: я не могу добавить новые столбцы в таблицу.