Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
DB: Копирование иерархий(поддеревьев в дереве)
|
|||
|---|---|---|---|
|
#18+
Привет всем... Короче... Есть иерархическая структура представленная как PARENT - CHILD, в таблице вида: ID | Parent_ID | Level | Other , где ID - идентификатор объекта; Parent_ID - ссылка на ID; Level - уровень в дереве; Если кто знает или подозревает, Как можно скопировать часть поддерева и вставить его в новое место, причём именно копирование(как в проводнике с папками), то немогли бы вы поделиться как всётаки это делается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2003, 16:44 |
|
||
|
DB: Копирование иерархий(поддеревьев в дереве)
|
|||
|---|---|---|---|
|
#18+
Первое, что приходит в голову - это временная таблица с дополнительным полем вроде NewID. Строго говоря, в этой таблице нужны только 2 поля: ID и NewID Перед началом копирования ветки в эту таблицу заносятся все записи входящую в копируемую ветку (их ID). Ну и далее в бесконечном цикле идет вставка по одной записи пока не останется ни одной записи во временной таблице с пустым значением NewID Т.е. для копирования выбирается узел у которого выполняются следующие условия: -) во временной таблице NewID - пустое -) минимальное значение Level -) первый попавшаяся запись из тех, которые удовлетворяют первым 2 условиям Найти новое значение ParentID и Level через сравнение ID и NewID уже не сложно. Общая идея, думаю понятна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2003, 17:45 |
|
||
|
DB: Копирование иерархий(поддеревьев в дереве)
|
|||
|---|---|---|---|
|
#18+
За идею спасибо - конечно попробую, но хотелось бы всё таки увидеть как это реализуется, то есть хоть какой ни буди примерчик......... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2003, 18:02 |
|
||
|
DB: Копирование иерархий(поддеревьев в дереве)
|
|||
|---|---|---|---|
|
#18+
какие врееменные таблицы? а рекурсией низя попробовать? когда функцие передается корень дерева, по этому корню получаем список пренадлежащих ему непосредственно вершин, копируем их и потом для каждой из полученных вершин применяем эту же самую функцию... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2003, 06:07 |
|
||
|
DB: Копирование иерархий(поддеревьев в дереве)
|
|||
|---|---|---|---|
|
#18+
Рекурсией, то можно было бы да вот уровней то в дереве сколько угодно, поэтому рекурсия не очень то подходит. Да и ещё на некоторых серверах существуют ограничения на вызов рекурсий, а если делать на стороне клиента, то очень загружается и сетевой трафик и сами интерфейсы отображения. P.S. Все пока придлогали только выраанты самих решений - это конечно очень хорошо..... Но всё таки неужели ни кто не может привести пример реализации - чего очень бы хотелось увидеть, как ГУРУ - это бы реализовали... А там бы после тестов и проверок на устойчивость и избыточность можно было бы охарактеризовать каждый из методов реализации и выбрать один из них, приведя некоторые аргументы в защиту последнего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2003, 09:11 |
|
||
|
DB: Копирование иерархий(поддеревьев в дереве)
|
|||
|---|---|---|---|
|
#18+
Только через таблицу соответствия как предлагает ВладимирМ. Т.к. ID_Parent тоже надо перекодировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2003, 09:20 |
|
||
|
DB: Копирование иерархий(поддеревьев в дереве)
|
|||
|---|---|---|---|
|
#18+
Рекурсия как раз и хорошо работает со вложенностью... только бы ограничений не было, это верно... на клиенте ее организовывать глубо, это верно... попробуй выяснить возможно ли на сервере нужную тебе глубину организовать... я думаю 1000 раз вызов вполне возможен, а глубина дерева на 1000 шагов, ИМХО, это довольно много. Хотя все зависит от задачи. П поводу кода... не думаю что будет кто-то писать... всеж код понятен, и кому-то за тебя его не очень захочется писать, да и кроме того, неизвестно что тебе надо а тут надо весьма подробно все описать. Быстрее будет тебе самому набрать код, ведь алгоритм довольно прост ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2003, 09:58 |
|
||
|
DB: Копирование иерархий(поддеревьев в дереве)
|
|||
|---|---|---|---|
|
#18+
На счёт кода довольно бонально и понятно... Но я сам неочень - то силён в написании хранимых процедур и функций, поэтому и хочется увидеть как бы это выглядело у тех кто считается в этом умельцами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2003, 10:09 |
|
||
|
DB: Копирование иерархий(поддеревьев в дереве)
|
|||
|---|---|---|---|
|
#18+
ты бы хотя б любопытства ради СУБД указал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2003, 03:18 |
|
||
|
DB: Копирование иерархий(поддеревьев в дереве)
|
|||
|---|---|---|---|
|
#18+
2StarWind: На счёт СУБД... Sybase SQL Anywhere 7 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2003, 09:48 |
|
||
|
DB: Копирование иерархий(поддеревьев в дереве)
|
|||
|---|---|---|---|
|
#18+
Может я чего-то не понимаю...но, не кажется ли вам, что простая замена значения Parent_ID на новое значение и является решением данной задачи. И все! Никаких таблиц и рекурсии... Единственная проблемка - это поле Level. Если его убрать, то больше ничего делать не надо. А так, после замены Parent_ID необходимо у всех CHILD записей пересчитать LEVEL, который равен: LEVEL_PARENTNEW - LEVEL_PARENTOLD + CURRENT_LEVEL + 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 17:37 |
|
||
|
DB: Копирование иерархий(поддеревьев в дереве)
|
|||
|---|---|---|---|
|
#18+
2Shev: Если реализовать как вы предлагаете, то это получиться уже не копирование а перенос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 17:51 |
|
||
|
DB: Копирование иерархий(поддеревьев в дереве)
|
|||
|---|---|---|---|
|
#18+
Сорри... а слона то, я и не заметил... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 18:06 |
|
||
|
DB: Копирование иерархий(поддеревьев в дереве)
|
|||
|---|---|---|---|
|
#18+
Мож какие - то предложения по реализации...? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 18:08 |
|
||
|
DB: Копирование иерархий(поддеревьев в дереве)
|
|||
|---|---|---|---|
|
#18+
может тебе еще и проект написать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2003, 03:48 |
|
||
|
DB: Копирование иерархий(поддеревьев в дереве)
|
|||
|---|---|---|---|
|
#18+
2StarWind: >>может тебе еще и проект написать? Да зачём мне проект. Проект и так давно уже написан. Просто, как уже говорилось, я не селён в создании оптимальных хранимых процедур и функций (особенно под Sybase SQL Anywhere - многие фичи не поддерживает), поэтому и обратился в эту конференцию, в надежде на помощь с корректной и правильной реализацией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2003, 09:06 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=32127067&tid=1348884]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 272ms |
| total: | 431ms |

| 0 / 0 |
