Поскольку вам нужны все комментарии, а не только некоторые, я бы не стал беспокоиться о MySQL части этого, которая будет просто SELECT * FROM Table ORDER BY Table.date_posted DESC
. Вы также можете использовать WHERE
, но, исходя из вашего примера, вам понадобятся все комментарии.
Полностью рабочий пример здесь: IDEOne Demo
Полностью вывод рабочего примера:
3
2
2.1
1
1.2
1.1
1.1.1
В PHP просто создайте ха sh, где мы храним комментарии так: parent_id => $commentobj
...
<?php
$comment_hash = [];
foreach($comments as $comment) {
if(!$comment_hash[$comment['parent_id']]) {
$comment_hash[$comment['parent_id']] = [];
}
$comment_hash[$comment['parent_id']][] = $comment;
}
?>
Мы знаем что первичные комментарии имеют parent_id
0, поэтому мы перебираем их. Я использую рекурсивную функцию, поскольку комментарии могут отвечать на другие комментарии бесконечно или, по крайней мере, на три слоя в соответствии с вашими заметками.
Наша функция рекурсивного отображения.
<?php
function displayComments($comments, $comment_hash, $depth) {
foreach($comments as $comment) {
print(str_repeat(' ', 4 * $depth));
print($comment['comment_text']);
print("\n");
displayComments($comment_hash[$comment['id']], $comment_hash, $depth + 1);
}
}
?>
Запуск функции рекурсивного отображения на верхнем уровне (то есть, parentid = 0) комментарии ...
<?php
displayComments($comment_hash[0], $comment_hash, 0);
?>