mysql select - как получить результат для потоковых / вложенных сообщений?
-
10-07-2019 - |
Вопрос
Я создаю многопоточную доску объявлений и стараюсь сделать ее простой.Существует таблица сообщений, а затем таблица ответов, в которой есть поле '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
Я знаю, что это может быть сложной проблемой, особенно с точки зрения производительности, но на самом деле я просто ищу самое простое решение этой проблемы.
Спасибо...
Решение
Вы используете наивный "хрестоматийный" способ хранения деревьев, т. е.сохраните ссылку на непосредственного родителя.Эта конструкция называется Список Смежности.Есть и другие решения:
- Перечисление путей, где вы храните в каждом узле дерева строку, кодирующую всех его прямых предков.
- Вложенные Наборы, умный подход Джо Селко, при котором вы используете два числовых значения для каждого узла, чтобы связать всех его потомков.
- Таблица закрытия (или Отношение смежности), где вы используете отдельную таблицу для перечисления каждой пары предок-потомок.
Смотрите мой ответ на "Какой наиболее эффективный / элегантный способ преобразовать плоскую таблицу в дерево?" для ссылок и примеров дизайна закрывающей таблицы.