Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
ltree перемещение веток
|
|||
|---|---|---|---|
|
#18+
Здраствуйте уважаемые слоноведы и слоноводы! Подскажите пожалуста как в ltree перемещать ветки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2008, 09:13 |
|
||
|
ltree перемещение веток
|
|||
|---|---|---|---|
|
#18+
Всё понял... поторопился, извиняюсь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2008, 10:56 |
|
||
|
ltree перемещение веток
|
|||
|---|---|---|---|
|
#18+
Уважаемый слоновед laser, ответьте пожалуйста на свой вопрос, мне тоже очень интересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2008, 11:11 |
|
||
|
ltree перемещение веток
|
|||
|---|---|---|---|
|
#18+
Попробую... пока готовлю :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2008, 11:25 |
|
||
|
ltree перемещение веток
|
|||
|---|---|---|---|
|
#18+
CREATE TABLE test (id serial, path ltree); id; path 1;"0.1" 2;"0.2" 3;"0.3" 4;"0.1.4" 5;"0.1.5" 6;"0.1.6" 7;"0.2.7" 8;"0.2.8" 9;"0.2.9" 10;"0.3.10" 11;"0.3.11" 12;"0.3.11.12" 13;"0.3.11.13" 14;"0.3.11.14" 15;"0.3.11.15" 16;"0.3.11.13.16" 17;"0.3.11.13.17" 18;"0.3.11.13.18" ИМЕЕМ: id елемента, id нового родителя ЗАДАЧА: переместить елемент с id=11 от родителя с id=3 к родителю с id=2 level = SELECT nlevel(path) FROM test WHERE id = 2; // level=2 oldPath = SELECT path FROM test WHERE id = 11; // oldPath= '0.3.11' Ищем значение 2 елемента в oldPath newPath = replace(oldPath, '.3.', '.2.'); // newPath='0.2.11' UPDATE test SET path = text2ltree(replace(ltree2text(path), oldPath, newPath)) WHERE path ~ oldPath|'.*'; РЕЗУЛЬТАТ: id; path 1;"0.1" 2;"0.2" 3;"0.3" 4;"0.1.4" 5;"0.1.5" 6;"0.1.6" 7;"0.2.7" 8;"0.2.8" 9;"0.2.9" 10;"0.3.10" 11;"0.2.11" 12;"0.2.11.12" 13;"0.2.11.13" 14;"0.2.11.14" 15;"0.2.11.15" 16;"0.2.11.13.16" 17;"0.2.11.13.17" 18;"0.2.11.13.18" Пока делаю так... Это конечно не средствами ltree, буду читать дальше :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2008, 12:39 |
|
||
|
ltree перемещение веток
|
|||
|---|---|---|---|
|
#18+
Всё неправильно!!! :( Буду думать дальше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2008, 06:31 |
|
||
|
ltree перемещение веток
|
|||
|---|---|---|---|
|
#18+
Вот так наверное: SELECT path INTO new_parent_path FROM catalog.kinds WHERE id = new_parent_id; SELECT path INTO old_path FROM catalog.kinds WHERE id = node_id; new_path = new_parent_path||'.'||node_id; UPDATE catalog.kinds SET path = text2ltree(replace(ltree2text(path), old_path, new_path)) WHERE path ~ text2ltree(old_path||'.*'); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2008, 07:08 |
|
||
|
ltree перемещение веток
|
|||
|---|---|---|---|
|
#18+
я может чего не понимаю, но пример помоему показательный: http://www.sai.msu.su/~megera/postgres/gist/ltree/ **update qq set l = 'TOP' || subpath(l, nlevel('TOP.Science.Astronomy')-1) where l <@ 'TOP.Science.Astronomy'; ** ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2008, 17:20 |
|
||
|
ltree перемещение веток
|
|||
|---|---|---|---|
|
#18+
CREATE OR REPLACE FUNCTION "transferThread"(text, bigint, bigint) RETURNS boolean AS $BODY$DECLARE tb ALIAS FOR $1; node_id ALIAS FOR $2; new_parent_id ALIAS FOR $3; old_path text; new_path text; new_parent_path text; flag integer; new_lquery text; sql text; error text; BEGIN -- Проверяем не совпадают ли идентификаторы элемента и предпологаемого родителя IF node_id = new_parent_id THEN error = 'ERROR --> nodeID == newParentID'; RAISE EXCEPTION '%', error; END IF; -- Проверяем не содержиться ли новый родитель в ветке елемента sql = 'SELECT path FROM '||tb||' WHERE id = '||node_id; EXECUTE sql INTO old_path; sql = 'SELECT index(path,'''||old_path||''') FROM '||tb||' WHERE id = '||new_parent_id; EXECUTE sql INTO flag; IF flag = 0 THEN error = 'ERROR --> newParentID is child nodeID'; RAISE EXCEPTION '%', error; END IF; -- Начинаем перемещение sql = 'SELECT path FROM '||tb||' WHERE id = '||new_parent_id; EXECUTE sql INTO new_parent_path; new_path = new_parent_path||'.'||node_id; new_lquery = old_path||'.*'''; sql = 'UPDATE '||tb||' SET path = text2ltree(replace(ltree2text(path), '''||old_path||''', '''||new_path||''')) WHERE path ~ '''||new_lquery; RAISE NOTICE '%', sql; EXECUTE sql; RETURN TRUE; /* IF FOUND THEN RETURN TRUE; ELSE RETURN FALSE; END IF; */ -- Проверяем не возникли ли исключительные ситуации EXCEPTION WHEN RAISE_EXCEPTION THEN RAISE NOTICE '%', error; RETURN FALSE; END;$BODY$ LANGUAGE 'plpgsql' VOLATILE; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2008, 12:07 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=35211434&tid=2004280]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 229ms |
| total: | 389ms |

| 0 / 0 |
