Автор Тема: Обсуждение статьи ДЕРЕВО КАТАЛОГОВ NESTED SETS (ВЛОЖЕННЫЕ МНОЖЕСТВА) И УПРАВЛЕНИЕ ИМ  (Прочитано 40512 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн APL

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 344
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.aerozone.ru
Цитировать
А если хочется выбрать и родительскую ветку и подчиненные узлы сразу?


select * from table where left_key >= $left_key and right_key <= $right_key order by left_key

Вроде так...
$left_key? $right_key - параметры родительского узла

P.S. А как перемещать ветку одним запросом? Можно пример запроса.

Moorena

  • Гость
Есть две таблицы ... TreeView

Из одно обновить другую ...

Кто поможет сделать это красиво и быстро

Заранее благодарен за советы...

Tamir

  • Гость
Ответ гостю:
SELECT tblTree.ID, tblTree.LeftKey, tblTree.RightKey, tblTree.Level, tblParent.ID FROM tblTree, tblTree AS tblParent WHERE tblParent.Level=tblTree.Level-1 AND tblParent.LeftKeytblTree.RightKey
UNION
SELECT ID, LeftKey, RightKey, 1, 0 FROM tblTree WHERE Level=1
ORDER BY LeftKey

Оффлайн Daiz13

  • наблюдатель
  • Постоялец
  • ***
  • Сообщений: 150
  • +0/-0
  • 2
    • Просмотр профиля
    • http://rg.com.ua/
Статья хорошая, отдельное спасибо за примеры. Но одного все же не хватает... Может Phoinix поделится примером как переместить ветку в любую часть дерева?

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Daiz13
В статье 2 запроса UPDATE для перемещения узла и его подчиненных узлов...

Что именно-то показать?

Оффлайн Daiz13

  • наблюдатель
  • Постоялец
  • ***
  • Сообщений: 150
  • +0/-0
  • 2
    • Просмотр профиля
    • http://rg.com.ua/
Ну, например, как узел 16 сделать подчиненным узла 2. Интересует перемещение не вверх/вниз а в любую точку дерева.

Еще один глупый вопрос - я так понимаю, что корень у дерева только один?

colmcc

  • Гость
Все классно и здорово, но либо я чего-то не понимаю, либо здесь никто кроме автора не вникал в статью. Уважаемый Phoenix, Вы очень помогли мне с организацией дерева каталогов, и все очень здорово работало, до момента перемещения узлов, все дело в том, что в этой статье Вы не указали необходимость обновления id узлов в момент перемещения, в данном случае операция корректно проводится с узлом лишь один раз после чего нумерация узлов   становится хаотичной. Поправте меня если я не прав, буду очень признателен Вам за это.
С уважением, Алексей

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
colmcc
Цитировать
Вы не указали необходимость обновления id узлов в момент перемещения

id - обновлять нельзя!!! Причем не только здесь...

colmcc

  • Гость
Спасибо, но тогда обьясните мне несведущему:
1
...3
...4
...5
2
.....
Перемещаем 5 на верх, получаем:
1
...3
...5
...4
2
.....
Проблема в том что при следующем перемещении "5" узла наверх, происходит ошибка определения left_key_near и  right_key_near?
HELP ME!

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
colmcc
Значит неправильно определяешь right_key_near,
Он будет равен left_key родитльского узла...

Оффлайн APL

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 344
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.aerozone.ru
Phoinix

Цитировать
Поэтому я сделал свое решение, которое позволяет 1 запросом перемещать узел в любую точку дерева...


Поделитесь тайным знанием плиз. заранее спасибо!

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
APL
Цитировать
Поделитесь тайным знанием плиз. заранее спасибо!

Ты статью-то хоть чтал??? ;)

Оффлайн APL

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 344
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.aerozone.ru
Да, читал, но одним запросом у меня не получилось...

Оффлайн colmcc

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 1
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Phoinix
Огромное спасибо! Во всем разобрался, все прекрасно работает!

Оффлайн Andrey Utkin

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 1
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.vhosting.ru
Содержание статьи соответствует названию, так же как и приведённые в ней схемы, т.к. они объясняют не то ЧТО ТАКОЕ деревья, представленные в виде вложеных множеств, а КАК ОНИ ИЗМЕНЯЮТСЯ при манипулировании.

Преимущества использования модели вложенных множеств в приложениях для веб очевидны. Разгружаются ресрурсы при выводе информации, т.е. там где и нужно. Упрощаются алгоритмы вывода, а соответственно сокращается время на разработку. Публиковать веб-сервисы одно удовольствие, просто бери и оборачивай в XML, причём из любого узла дерева.

По крайней мере мы в текущих проектах http://www.vhosting.ee/rus/contractors_active_competitions.cfm  планируем их в той или иной мере использовать. А вот в какой, зависит от того, насколько нам удастся решить некоторые проблемы.

Проблема 1. Сортировка.
Пример.
Названия узлов на трёх языках. Требуется упорядочить вывод в алфавитном порядке.

Насколько я понимаю, порядок формируется на стадии создания дерева. Изменять его «на лету», это всё равно, что строить новое дерево для каждого запроса.

Пока остановились на таком решении.
Для каждого языка строится своё дерево и оно используется для вывода. Одно из них является основным, с ним проводятся все манипуляции при изменениях. Другие подчинённые и просто перестраиваются после внесение изменений в первое.

Вопрос.
Кто какие решения может предложить в плане Сортировки.


Кстати,  можно использовать одновременно представления дерева как списка смежных вершин и как вложенных множеств, например новые разделы приложения создаются с использованием алгоритмов вложенных множеств, без изменения старых разделов, использующих модель списка смежных вершин. Для этого в таблице оставляется поле parent_id и его значение после изменений переопределяется на основании значений lft_key, rgt_key.
www.vhosting.ru - ColdFusion, MS SQL server - что ещё нужно для разработки эффективных веб-приложений?

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28