Мне также пришлось реализовать рекурсивные комментарии. Я сломал себе голову с вложенной моделью, позвольте мне объяснить, почему:
Предположим, вы хотите, чтобы комментарии к статье. Давайте назовем корневые комментарии комментариями, непосредственно прикрепленными к этой статье. Давайте позвоним ответам на комментарии, которые являются ответом на другой комментарий.
Я заметил (к сожалению), что я хотел, чтобы комментарии к корню упорядочивались по дате по убыванию, НО Я хотел ответить на комментарии к заказу date asc !! Paradoxal !!
Таким образом, вложенная модель не помогла мне уменьшить количество запросов.
Вот мое решение:
Создать комментарий таблицу со следующими полями:
ID
article_id
parent_id (обнуляемая)
date_creation
электронной
whateverYouLike
последовательностью
глубины
3 ключевых поля этой реализации: parent_id, последовательность и глубина. parent_id и depth помогают вставлять новые узлы.
Последовательность - это реальное ключевое поле, это своего рода эмуляция вложенной модели.
Каждый раз, когда вы вставляете новый комментарий root, он кратен x. Я выбираю x = 1000, что в основном означает, что у меня может быть 1000 максимальных вложенных комментариев (это единственный недостаток, который я нашел для этой системы, но этот предел можно легко изменить, этого достаточно для моих потребностей сейчас).
Последний комментарий к корню должен быть с наибольшим порядковым номером.
Теперь ответные комментарии: у нас есть два случая: ответ за комментарий root или ответ для ответа.
В обоих случаях алгоритм такой же: берет последовательность родителей и извлекает их для получения вашего порядкового номера. Затем вам нужно обновить номера последовательностей, которые находятся ниже последовательности родителя и выше базовой последовательности, , которая представляет собой последовательность комментариев root чуть ниже соответствующего комментария к корню.
Я не ожидаю, что вы все это поймете, так как я не очень хороший объяснитель, , но я надеюсь, что это может дать вам новые идеи. (По крайней мере, это сработало для меня лучше, чем вложенная модель = меньше запросов, что является реальной целью).
но что, если у детей есть дети, а у них есть дети, или есть много комментариев? Этот метод кажется, что он будет включать в себя множество запросов, и может быть довольно медленным, когда присутствует множество комментариев. – GSto