У меня есть стол стол
+----+-------+--------------+
| Id | Name | Message |
+====+=======+==============+
| 1 | John | John's msg |
| 2 | Marco | Marco's msg |
| 3 | Ivan | Ivan's msg |
+----+-------+--------------+
Таблица комментариев, PostId — внешний ключ
+----+-------+--------------+--------+
| Id | Name | Comment | PostId |
+====+=======+==============+========+
| 1 | John | John's msg | 2 |
| 2 |Joseph |Joseph's msg | 2 |
| 3 | Ivan | Ivan's msg | 2 |
| 4 |Natalie|Natalie's msg | 1 |
+----+-------+--------------+--------+
Создана таблица закрытия для сохранения иерархии комментариев, как описано в:
http://karwin.blogspot.ba/2010/03/rendering-trees-with-closure-tables.html
Закрытие стола
+----------+-------------+
| ancestor | descendant |
+==========+=============+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 4 | 4 |
+----------+-------------+
Для того чтобы создать отношение предка> потомка в PHP I
используйте этот запрос
`select c.* from comments c join closure t on (c.id = t.descendant ) where c.postid=2`
Я получаю результат с первым 3 комментариями из таблицы комментариев.
Но я хочу отобразить это на веб-странице следующим образом:
Post Id=2
Comment id=1
Comment id=2
Comment id=3
Я не знаю, как сказать PHP, кто является предком, а кто
потомок. Это моя лучшая попытка:
$sql = "select c.* from comments c join closure t on
(c.id = t.descendant ) where c.postId=2";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "Name: " . $row["name"]."". "Message:" . $row["comment"].";
}
} else {
echo "No comments yet";
}
Но он показывает только все комментарии в строке. Нужен способ определить, когда комментарий является потомком.
while($row = $result->fetch_assoc()) {
if (ascendant){
echo "ascendant comment"}
else{
echo "tab"."descendant comment"}
}
Задача ещё не решена.
Других решений пока нет …