mysql select - как получить результат для потоковых / вложенных сообщений?

StackOverflow https://stackoverflow.com/questions/433970

Вопрос

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

Я немного запутался в том, как выполнить вызов 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

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

Спасибо...

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top