Возможный дубликат:
Как спроектирована / запрограммирована система комментариев reddit?
Я хочу изучить алгоритм отображения комментариев за Reddit. Как комментарий связан с его ребенком и так далее? Как они хранятся в базе данных?
Давайте скажем
comment1 -comment2 --comment3 -comment4 --comment5 --comment6 ---comment7 ----comment8 comment9
Как отобразить комментарий5, который после комментария4, который после комментария1? Какова идея этой последовательности? И как связать их в базе данных?
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, комментарии могут иметь родительские столбцы. Однако, если вы хотите, чтобы более подробный и всесторонний алгоритм использовался в качестве шаблона для вашей реализации, взгляните на этот алгоритм потоковой передачи сообщений .