MySQL выбрать - как получить результат для многопоточных / вложенных сообщений? - PullRequest
3 голосов
/ 12 января 2009

Я создаю многопоточную доску объявлений и стараюсь сделать ее простой. Есть таблица сообщений, а затем таблица ответов, которая имеет поле 'reply_id', которое может быть нулевым, чтобы указать ответ верхнего уровня, или значение, которое указывает многопоточный ответ.

Я немного запутался в том, как сделать вызов SELECT для этого типа таблицы?

Reply
-id (every reply gets a unique id)
-message_id (the message it is replying to)
-reply_id (the id of the reply it may be replying to - for threading)
-reply

Я знаю, что это может быть сложной проблемой, особенно с точки зрения производительности, но я просто ищу самое простое решение для этого.

спасибо ...

1 Ответ

1 голос
/ 12 января 2009

Вы используете наивный "учебный" способ хранения деревьев, т.е. сохраняете ссылку на ближайшего родителя. Эта конструкция называется Список смежности . Есть и другие решения:

  • Перечисление пути , где вы храните в каждом узле дерева строку, кодирующую всех его прямых предков.
  • Вложенные множества , умный подход Джо Селко, в котором вы используете два числовых значения для каждого узла, чтобы связать всех его потомков.
  • Таблица закрытия (или отношение смежности), где вы используете отдельную таблицу для перечисления каждой пары предок-потомок.

См. Мой ответ на " Какой самый эффективный / элегантный способ разбить плоский стол на дерево? " для ссылок и примеров конструкции Closure Table.

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