Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / помогите решить задачу по Nested Set / 14 сообщений из 14, страница 1 из 1
26.02.2016, 19:27
    #39180179
Nick-name
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите решить задачу по Nested Set
забегая вперёд скажу что требования с 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
26.02.2016, 22:46
    #39180315
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите решить задачу по Nested Set
Создай элемент root, он и будет корнем, он него уже все комментарии пойдут, т.е. он 0-1, потом 0-3 после первого коммента и т.д.
...
Рейтинг: 0 / 0
26.02.2016, 23:42
    #39180334
MikkiMouse
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите решить задачу по Nested Set
Nick-name,

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

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

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

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

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

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

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

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

Там же в статьях тупо пошагово расписывают как апдейтить, ну как же так? Это все равно как тебе рассказывают, что передачу надо переключать при выжатом сцеплении, а ты в который раз повторяешь: "А почему?"
так я и говорю, статья очень понятная, пока до дела не дошло.
вот в статье пример там один рутовый узел и от него уже всё разрастается, вот мне в таблице, что создать в качестве этого рутового узла?
...
Рейтинг: 0 / 0
27.02.2016, 00:40
    #39180354
Nick-name
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите решить задачу по Nested Set
Nick-name,
Скажем так, я не понимаю с чего в таблице дерево начинать ростить?
...
Рейтинг: 0 / 0
27.02.2016, 01:37
    #39180364
Nick-name
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите решить задачу по Nested Set
Но самое главное , я не представляю как разделять комментарии и комментарии комментариев на странице, по каким признакам это делается?
...
Рейтинг: 0 / 0
27.02.2016, 17:15
    #39180585
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите решить задачу по Nested Set
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
27.02.2016, 18:25
    #39180609
Nick-name
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите решить задачу по Nested Set
Програмёр,
Большое спасибо
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / помогите решить задачу по Nested Set / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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