dudeonthehorse
@dudeonthehorse
Email Developer

Как организовать ступенчатую модель комментирования а-ля "Хабр" в связке PHP + MySql?

Вопрос, собственно, в названии. Какие связи в мускуле использовать, как правильно организовать вывод?
  • Вопрос задан
  • 3616 просмотров
Решения вопроса 1
gaelpa
@gaelpa
Рекурсия с запросами к базе, видимо, не очень подходит.
Я использовал помимо commentID и parentID еще topicID, чтобы по нему делать выборку.
Далее в пхп это переформировывается в дерево и все дерево кэшировал в сериализованном виде.
А рекурсия уже при выводе в зависимости от верстки. с фреймворками подсказать, увы, не могу.
Ответ написан
Пригласить эксперта
Ответы на вопрос 9
@MOst_53
Рекурсия вам в помощь. Выбираете все коменты у которых parent_comment_id = 0 и для каждого из них выполняете рекурсивно функцию get_child_comments($comment_id).

Структура таблицы БД примерно такая: comment_id(int), parent_comment_id(int), comment_text(text) и дальше по желанию.
Ответ написан
@korotovsky
Если использовать фреймворк Yii то можно реализовать с помощью поведения NestedSet code.google.com/p/yiiext/downloads/detail?name=trees_0.95.zip&can=2&q=
Ответ написан
Комментировать
un1t
@un1t
Погуглите на тему nested sets. На всяких фреймворках и ORMах есть готовые реализации. Наример в cakephp, doctrine есть, а в других типа yii есть сторонние расширения (или может быть уже встроили тоже).

Вот полезные ссылки по деревьям:
Ответ написан
Комментировать
akalend
@akalend
программирую
Рекурсия в БД (запрос в запросе) — это смерть проекту. Я вывожу все дерево одним запросом (по topic_id упорядочивая по времени) и строю дерево уже непосредственно в цикле обработки данных.
Ответ написан
Комментировать
tampere
@tampere
Лучше весь путь (список parent-id) хранить к коменту, тогда дерево коментов можно выбирать одним запросом (так, по-моему, в ЖЖ делают).
Ответ написан
timursun
@timursun
Creative project/product manager
После того, как в одном запросе будут получены все коментарии из базы, относящиеся к посту, составлять древовидный php-массив. Параллельно вести линейный массив, ключи которого — id коммента, а значения — ссылки на элементы дерева. Такой список-«справочник» нужен для того, чтоб просто добавлять вложенные комменты указывая только id родителя и не искать по всему дереву, куда поставить новый коммент.
Ответ написан
Комментировать
@nekoval
для форумов и комментариев часто используют лево-правую нумерацию. При этом сильно возрастает цена добавления новых узлов:
http://blogs.sitepoint.com/hierarchical-data-database-2/
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы