Каков алгоритм, лежащий в основе вложенных комментариев?

Возможный дубликат:
Как спроектирована / запрограммирована система комментариев reddit?

Я хочу изучить алгоритм отображения комментариев за Reddit. Как комментарий связан с его ребенком и так далее? Как они хранятся в базе данных?

Давайте скажем

comment1 -comment2 --comment3 -comment4 --comment5 --comment6 ---comment7 ----comment8 comment9 

Как отобразить комментарий5, который после комментария4, который после комментария1? Какова идея этой последовательности? И как связать их в базе данных?

Related of "Каков алгоритм, лежащий в основе вложенных комментариев?"

AS @Rafe сказал, что фактическое хранилище довольно простое, это будет что-то вроде:

 | id | name | parent | | 1 | comment1 | 0 | | 2 | comment2 | 1 | | 3 | comment3 | 2 | | 4 | comment4 | 1 | | 5 | comment5 | 4 | | 6 | comment6 | 4 | | 7 | comment7 | 6 | | 8 | comment8 | 7 | | 9 | comment9 | 0 | 

Конечно, фактически получение информации от этого (возможно) тяжелой части. Вы можете, конечно, получить комментарии от детей с чем-то вроде: SELECT * FROM table WHERE parent='4' даст вам всех детей comment4. Но подсчет детей, перечисление всех детей в иерархическом порядке будет немного сложнее. Другие ответы могут предоставить дополнительную информацию об этом.

Он называется иерархией . Каждый комментарий либо не имеет родительского комментария, либо имеет один родительский комментарий. Таким образом, вы можете отобразить каждый комментарий « верхнего уровня » (благодаря тому, что у них нет родительских комментариев), затем комментарии для каждого из них и т. Д. И т. Д.

И структура базы данных может выглядеть так для таблицы comments :

  • id идентифицирующий один комментарий,
  • parent_id установлен на идентификатор родителя или не установлен (установлен в NULL или установлен на 0 ),
  • created – отметка времени для создания комментариев,
  • content – фактический комментарий,
  • любое дополнительное поле, в котором вы нуждаетесь,

В значительной степени, что заметил @Rafe Kettler, комментарии могут иметь родительские столбцы. Однако, если вы хотите, чтобы более подробный и всесторонний алгоритм использовался в качестве шаблона для вашей реализации, взгляните на этот алгоритм потоковой передачи сообщений .