Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Иерархичные комментарии


Автор: MPx 21.5.2008, 04:21
Приветствую. 4 часа ночи, не могу додуматься...
Задача у меня: возможность добавления комментариев с неограниченной вложенностью, т.е. чтобы на  любой комментарий можно добавить свой комментарий и т.д.
Пример можно посмотреть допустим на этом сайте: http://habrahabr.ru/blog/i_am_clever/42666.html.

Текущая стр-ра БД:

comment_id | user_login | post_id | comment_parent | comment_rating | comment_text | comment_date

comment_id - idшник коммента;
user_login  - кому принадлежит коммент;
post_id - какому сообщению на сайте принадлежит этот комментарий;
comment_parent - к какому комменту привязан;
comment_rating - общий рейтинг коммента;
comment_text - текст коммента;
comment_date - дата.

Как видите, на данный момент сделал привязку коммента к комменту. Но дело в том, что неизвестно, на каком уровне находится коммент, соответственно, неизвестно какой отступ ставить и прочее. Т.к. найти родителя допустим коммента для третьего уровня крайне сложно (можно рекурсивно конечно, но имхо это неверено с точки зрения поедания ресурсов).

Что можете предложить? Добавить для коммента, который является комментом на другой коммент, поле уровня? Аля comment_level?

Извините, если сумбурно объяснил. Голова  smile 
Спасибо за помощь.

Автор: skyboy 21.5.2008, 08:15
Цитата(MPx @  21.5.2008,  03:21 Найти цитируемый пост)
неизвестно какой отступ ставить

если проблема - именно в отступе, то скажи, так ли тебе надо знать "абсолютное значение порядка вложенности" или достаточно того, что "вот это - вложеннее вот того"?
вообще, неясно, что тебе необходимо.
в любом случае, кроме хранения идентификатора предка возможны ещё структуры nested sets(поиская в google) и materialized path(когда хранится весь список комментариев-предков для каждого комментария). соответственно, в зависимости от того, какая перед тобой стоит задача(выводишь ли ты только коммнетарии определенного комментария или все "дерево", какя информация тебе нужна для вывода - например, уровень вложенности и тому подобные вопросы, ответы на которые знаешь только ты сам), выбирается наиболее подходящая структура хранения.
но даже у тебя с твоей структурой, к слову говоря, можно пользовать не рекурсивное построение дерева.  если у тебя кроме mysql есть ещё язык программирования(например, PHP).
Цитата(MPx @  21.5.2008,  03:21 Найти цитируемый пост)
это неверено с точки зрения поедания ресурсов

смотря, как реализована рекурсия.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)