powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / помогите решить задачу по Nested Set
14 сообщений из 14, страница 1 из 1
помогите решить задачу по Nested Set
    #39180179
Nick-name
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забегая вперёд скажу что требования с Nested Set не мои.
и так, есть некая сущность которую можно комментировать.
и комментарии можно комментировать вложеность я так понял не ограничена.

табличка в базе выглядит так
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
CREATE  TABLE `ns`.`comment` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `left_key` INT NOT NULL ,
  `right_key` INT NOT NULL ,
  `text_comment` TEXT NOT NULL ,
  `author` INT NOT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = MyISAM;


во-первых вопрос, что использовать в качестве корня, если первый комментарий то получается так
у первого коммента ключи будут 0-1
но и у второго будет 0-1
а вот если комментировать комментарий то у ответа уже будут ключи 1-2, а у корня 0-3.
с Nested Set я никогда не работал, поделитесь опытаом как такое решается
читал статью всё доходчего, но на практике как-то всё сложнее полчается.
...
Рейтинг: 0 / 0
помогите решить задачу по Nested Set
    #39180315
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создай элемент root, он и будет корнем, он него уже все комментарии пойдут, т.е. он 0-1, потом 0-3 после первого коммента и т.д.
...
Рейтинг: 0 / 0
помогите решить задачу по Nested Set
    #39180334
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick-name,

Читай осьосьо статтю. Че эта ано будет 0-1? А почему не 1-4 и 2-3 ?
...
Рейтинг: 0 / 0
помогите решить задачу по Nested Set
    #39180335
Nick-name
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SharuPoNemnoguСоздай элемент root, он и будет корнем, он него уже все комментарии пойдут, т.е. он 0-1, потом 0-3 после первого коммента и т.д.
Просто чтобы я пониал, вот элемент root в таблице для комментариев он как должен выглядеть, как первый комментарий, или как как запись которая имеет какието специальные атрибуты?
...
Рейтинг: 0 / 0
помогите решить задачу по Nested Set
    #39180336
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick-name,

Если у тебя только 1 корневой элемент, чувак, то левый у него равен 1, а правый - 2. Че тут такого сложного?
...
Рейтинг: 0 / 0
помогите решить задачу по Nested Set
    #39180338
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда добавил коммент к корневому - у корневого - 1-4, у коммента - 2-3. По-моему, обезьяна бы после парочки бананов поняла бы.
...
Рейтинг: 0 / 0
помогите решить задачу по Nested Set
    #39180341
Nick-name
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MikkiMouse,

а почему 1-4 а не 0-4,

и главный вопрос, как апдейтить-то,

вот например прокомментировали комментарий

то есть было так
0-3(root чем бы он ни был)
1-2 комментарий

и тут этот комментарий, то же комментируют, кк обновлять, в цикле, или как то одним запросом?
сначала всё проапдейтить потом инсёрт или сначала инсёрт потом апдейтить
...
Рейтинг: 0 / 0
помогите решить задачу по Nested Set
    #39180350
Nick-name
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что сделать рутовым узлом в таблице?
...
Рейтинг: 0 / 0
помогите решить задачу по Nested Set
    #39180351
Nick-name,

Там же в статьях тупо пошагово расписывают как апдейтить, ну как же так? Это все равно как тебе рассказывают, что передачу надо переключать при выжатом сцеплении, а ты в который раз повторяешь: "А почему?"
...
Рейтинг: 0 / 0
помогите решить задачу по Nested Set
    #39180353
Nick-name
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходил карочNick-name,

Там же в статьях тупо пошагово расписывают как апдейтить, ну как же так? Это все равно как тебе рассказывают, что передачу надо переключать при выжатом сцеплении, а ты в который раз повторяешь: "А почему?"
так я и говорю, статья очень понятная, пока до дела не дошло.
вот в статье пример там один рутовый узел и от него уже всё разрастается, вот мне в таблице, что создать в качестве этого рутового узла?
...
Рейтинг: 0 / 0
помогите решить задачу по Nested Set
    #39180354
Nick-name
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick-name,
Скажем так, я не понимаю с чего в таблице дерево начинать ростить?
...
Рейтинг: 0 / 0
помогите решить задачу по Nested Set
    #39180364
Nick-name
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но самое главное , я не представляю как разделять комментарии и комментарии комментариев на странице, по каким признакам это делается?
...
Рейтинг: 0 / 0
помогите решить задачу по Nested Set
    #39180585
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick-nameНо самое главное , я не представляю как разделять комментарии и комментарии комментариев на странице, по каким признакам это делается?

Таблица nested sets для удобства содержит 2 обязательных значения (left и right ключи), 1 вспомогательное (level) и любое количество незначимых значений (сама информация по узлу дерева)
Для того, что бы всё было проще, дерево имеет ОДИН корневой элемент, а в него уже начинает вкладываться сама структура дерева).

По поводу "почему 1-4, а не 0-3" - а тебе не пофигу откуда начинать нумерацию? да хоть от -100500 (минус сто-пятсот)


Как добавлять новые записи? - очень просто!
Я надеюсь ты уже понял, что каждый узел дерева резервирует под себя 2 номера (под левый и правый ключ).
Соответственно, если ты записываешь новый узел, то его левый и правый ключи будут соответственно на 1 и 2 больше правого ключа предыдущего (или левого ключа родителя, если новый элемент будет первым потомком своего родителя).
После этого, все ключи большие или равные по значению левому ключу нового элемента увеличиваются на 2.

Вспомогательное значение level потомка записывается как level родителя плюс 1.

Удаление происходит в обратном порядке (то есть удаляем элемент, а индексы сдвигаем вниз на 2... это если удаляется 1 элемент разумеется) :)


Как разделить комментарии и комментарии комментариев?
Если считать, что комментарии к страницам всегда находятся на первом уровне дерева, то отличать их можно без проблем по значению level.


Тут и правда нету ничего сложного... на хабре классную статью видел, с неё освоение начинал... но что-т найти не могу её :(


P.S. Недавно перешёл на активное использование деревьев типа "Materialized Path". Работа с ними происходит в разы легче. )) И производительность при записи выше (если комментировать собираетесь активно, то это очень важно)... Как ни странно, допёр посредством обычного умозаключения и совершенствования алгоритмов работы nested sets. А сейчас вот прочитал что подход далеко не новый (хотя и раньше это осознавал, но сейчас явно об этом почитал). Только у меня он всё же немного изменённый вышел, рассчитан на неглубокие деревья (с ограниченной вложенностью, под древовидную структуру сайта), но очень простой в использовании.
...
Рейтинг: 0 / 0
помогите решить задачу по Nested Set
    #39180609
Nick-name
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,
Большое спасибо
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / помогите решить задачу по Nested Set
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]