Дневник Сулеймана
дневник заведен 12-11-2002
постоянные читатели [12]
d_r, girl, Guru, HeartBeat, Lady_Dynamite, Rymenar, Shantalya, Skyer, ксанька, Москви4ка, ПАРАД УРОДОВ, Фай Родис
закладки:
цитатник:
дневник:
местожительство:
Москва, Россия
[1] 27-05-2008 10:25
Алло алло!..

[Print]
Забрел случайно
[1] 04-02-2007 21:31
Сказка о мальчике

[Print]
Забрел случайно
[1] 18-12-2006 01:26
Билан

[Print]
Забрел случайно
[8] 12-12-2006 08:44
Лживый патриотизм

[Print]
Забрел случайно
05-10-2006 12:48 Деревья в SQL
Не буду сейчас рассказывать о представлении деревьев в SQL, т.к. написано про это не просто много, а очень много (например, вот здесь http://gsbelarus.com/gs/modules.php...article&sid=314)

Расскажу о решении задачи выбора излов произвольного поддерева.

Итак, у нас есть таблица, с древовидной структурой:
Id; ParentId; остальные поля.

В поле ParentId содержится ссылка на родительский элемент - пожалуй, самый распространённый способ представления дерева произвольной глубины в реляционной БД (если сущности в узлах различаются, то можно использовать дополнительные таблицы и связь 1-1).

Что делать в том случае, если вам по Id родителя надо выбрать все его дочерние элементы и дочерние дочерних и т.д. Самое простое - ввести дополнительное текстовое поле (NodeCode), в которое заносить информацию такого вида:
Id родителя1 | Id родителя2 | ... Id родителяN | Id элемента.
Где | - некий символ разделитель (может и не быть, в принципе)

Например (структура таблицы: Id; ParentId; NodeCode)
1; null; 1
2; 1; 1|2
3; 1; 1|3
4; 2; 1|2|4
5; 4; 1|2|4|5

Тогда выбор всех дочерних узлов для узла с Id=3 будет таким:
select * from Table where NodeCode like '1|3%'

Очень просто и быстро, с учётом того, что выражение like '1|3%' позволяет использовать индекс по полю NodeCode (особенно будет хорошо, в случае кластерного индекса).

Вот так.
Комментарии:
05-10-2006 23:13
спасибо
al-gali
06-10-2006 11:06
Камрад
Да было бы за что! :)

Ваш комментарий:
Камрад:
Гость []
Комментарий:
[смайлики сайта]
Дополнительно:
Автоматическое распознавание URL
Не преобразовывать смайлики
Cкрыть комментарий
Закрыть