Модифицированный обход предварительного заказа для системы комментариев - PullRequest
0 голосов
/ 14 июня 2009

Я пытаюсь создать систему комментариев для блога. У меня работает модифицированная система обхода предварительного заказа (использовал это руководство: http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/).

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

моя таблица комментариев выглядит так:

+-------------+----------------------+-----+-----+

| comment_id  | message              | lft | rgt |
auto increment
+-------------+----------------------+-----+-----+

Это хороший способ справиться с этим:

Я добавляю столбец к моей таблице комментариев с именами "blog_post_id" и "root". Когда я делаю запись в блоге, я добавляю запись в таблицу комментариев с blog_post_id, и для root задано значение true. Тогда lft - это comment_id, а справа - comment_id + 1.

Чтобы загрузить комментарии к сообщению в блоге, я нашел бы lft и rgt, ГДЕ blog_post_id = x и root = true, затем выделил бы все комментарии между lft и rgt, где blog_post_id равен x ...

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

Спасибо

Ответы [ 2 ]

0 голосов
/ 15 июня 2009

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

Посмотрите здесь пример реализации: http://api.rubyonrails.org/classes/ActiveRecord/Acts/NestedSet/ClassMethods.html

0 голосов
/ 14 июня 2009

Как насчет добавления столбца blog_post_id и рассмотрения самого сообщения в блоге как виртуального комментария (корень дерева комментариев)? Тогда у него может быть несколько детей.

Используя этот метод, вы можете использовать все алгоритмы из этой статьи без изменений, с оговоркой, которую вы добавляете AND blog_post_id == foo ко всем запросам и всегда игнорируете корневой комментарий (поскольку он обозначает сам блог.)

...