Какой алгоритм скрывается за вложенными комментариями? - PullRequest
4 голосов
/ 26 августа 2011

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

Ответы [ 3 ]

4 голосов
/ 26 августа 2011

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

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

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

Как сказал @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' даст вам всех детей комментария4. Но подсчитать детей, перечислить всех детей в иерархическом порядке было бы немного сложнее. Другие ответы могут предоставить дополнительную информацию по этому вопросу.

3 голосов
/ 26 августа 2011

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

...