Алгоритм древовидной системы комментариев с неограниченным вложением? - PullRequest
2 голосов
/ 17 февраля 2012

Мне нужно создать древовидную систему комментариев для высоконагруженного веб-сервиса на основе Zend Framework с неограниченным вложением, также эта система должна быть очень быстрой.

Комментарии должны отправляться для Zend_View в виде простого массива, такого какниже.В Zend_View все комментарии будут отображаться через foreach ().Структура будет отображаться с CSS-классами.

array(
   '0' => 'comment1 (here must be a a much of data)',
   '1' => 'comment for comment1',
   '2' => 'comment2',
   '3' => 'comment3',
   '4' => 'comment for comment3',
   '5' => 'comment of comment ^_^ '
);

Теперь я могу получить все комментарии необходимой страницы из модели, отсортированной по дате.Их структура указана ниже.

id |page_id |пользователь |родитель |дата |текст и т. д.

id - первичный ключ AI

page_id - TINY int

user -int

parent - TINY int

data - отметка времени

1 Ответ

4 голосов
/ 17 февраля 2012

Самый простой и наименее оптимизированный

для неограниченного вложения это родительские / дочерние отношения в комментарии:

Comment
---
id_comment
id_parent ALLOW NULL
body
...etc

Чтобы вывести это, вы должны сначала выбрать всех родителей (комментарии с родителем NULL), а затем иметь рекурсивную функцию, чтобы выбрать каждый уровень потомков для каждого родителя и вывести его. Излишне говорить, что это слишком много накладных расходов.

Я бы посоветовал вам взглянуть на модель вложенного множества:

http://en.wikipedia.org/wiki/Nested_set_model

Используя модель вложенного множества, вы можете выбрать все дерево одним запросом.

Я не слишком подробно изучал этот пример, но, возможно, посмотрите на это: http://devzone.zend.com/1675/class-for-managing-nested-set-data/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...