Как вывести древовидные комментарии?

Во общем есть таблица:
news_id
id - тот кто добавил комментарий
parent_id - ставим 0 если обычный или ид родителя
date_time - дата и время
Всё хорошо, но как вывести комментарии древовидно?
  • Вопрос задан
  • 5195 просмотров
Пригласить эксперта
Ответы на вопрос 4
Ответ написан
Комментировать
icelaba
@icelaba
Знаю и умею всё
А что вас смущает? Вы не можете плоский массив превратить в дерево?
Или уже полученное дерево вывести на экран?

В первом случае за первый прогон создаете (далее псевдокод)
map[0] = {...im root.., children:[]}
for current in alldblines
map[current.id] = {блабла бла, children:[] }

за второй прогон
for current in alldblines
map[current.parent_id].children.push(current)

с момента как дерево получено - пробежитесь по нему просто рекурсивной функций начиная с map[0].children для вывода используя например ul li теги

тут для первой части готовый пример на php
stackoverflow.com/questions/7767961/converting-an-...
Ответ написан
Комментировать
evnuh
@evnuh
Поиск Гугл помог мне, впусти и ты его в свой дом
Нигде не смотри, а почитай про хранение деревьев в реляционных БД.
Ответ написан
Комментировать
Dejurin
@Dejurin
Software engineer
Недавно столкнулся с таким же вопросом, прочитал массу статей и рекомендаций, даже тут вопрос мой удалили )
провел свои тесты и пришел к выводу, что в данной связке mysql+php с этим справится сам PHP
вот статья techathon.mytechlabs.com/hierarchical-tree-comment...
Я знаю одно из правил, что то, что может сделать база не нужно грузить php, но в данном случае эта рекурсия не так уж страшна, более того mysql не может сделать то о, чем вы просите, без костылей.
Я провел простенький тест: сгенерировал около 1м записей (комментарии) и создал ветку с 300 комментариями (уровень вложенности был до 5), нагрузил страницу простенькой утилиткой "ab -n 500 -c 10000" в и понял, что овчинка выделки не стоит, PHP прекрасно справился с задачей.
Рабочий пример находится и успешно юзается на рабочем сайте с 60к аудиторией в сутки и все ок.
3f559daf58204afd93e023ed4feaa374.png
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы