Форум: "Начинающим";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
ВнизДерево Найти похожие ветки
← →
Рафик © (2005-11-25 12:34) [0]Уменя есть табличка из двух полей
ID ParentId
Как мне получить все дерево одним запросом, т.е. я знаю нижний элемент а мне нужно получить верхний элемент!!!
← →
Ega23 © (2005-11-25 12:36) [1]Что значит "нижний" и "верхний" элемент?
Ты знаешь "лист" и тебе надо найти "корень"? Ты знаешь "корень" и тебе надо найти все "листья"?
← →
Reindeer Moss Eater © (2005-11-25 12:38) [2]А нет разницы что там ему надо найти.
Все равно древовидные запросы в MSSQL не поддерживаются.
T-SQL надо использовать.
← →
Рафик © (2005-11-25 12:40) [3]Я знаю лист мне надо найти корень!
← →
Рафик © (2005-11-25 12:56) [4]Значит это невозможно сделать
← →
Ega23 © (2005-11-25 12:59) [5]
> Значит это невозможно сделать
Почему? В мире нет ничего невозможного!
По твоему условию, корнем является тот, у кого ParentID=NULL?
Если так - то через ХП элементарно делается.
← →
msguns © (2005-11-25 13:03) [6]Рекурсия ?
← →
Рафик © (2005-11-25 13:08) [7]Нет не обязательно null, там есть еще один параметр поле par и вот если этот парметр равен 1 то это корень!!!
← →
Nikolay M. © (2005-11-25 13:09) [8]А поискать?
http://www.sql.ru/forum/actualtopics.aspx?search=%E4%E5%F0%E5%E2%EE&bid=1
← →
Nikolay M. © (2005-11-25 13:10) [9]
> msguns © (25.11.05 13:03) [6]
> Рекурсия ?
Для MS SQL 2000 - только 32 уровня вложенности. Да и циклом это делается намного проще.
← →
Ega23 © (2005-11-25 13:14) [10]
> Для MS SQL 2000 - только 32 уровня вложенности. Да и циклом
> это делается намного проще.
Кстати, при длительных раздумьях так и не сумел придумать задачи, где эти 32 уровня будут перекрыты
← →
Nikolay M. © (2005-11-25 13:27) [11]
> Ega23 © (25.11.05 13:14) [10]
Тут неоднократно возникала гениальная мысль по хранению информации в таблице вида (ID, ParentID, ParameterName, ParameterValue). Действительно, сохранить можно почти все, что душа пожелает. 32 уровня вложенности? Легко.
← →
Ega23 © (2005-11-25 13:29) [12]
> 32 уровня вложенности? Легко.
Ну я же не про абстрактные решения любых задач, а про вполне конкретные...
← →
Nikolay M. © (2005-11-25 13:31) [13]
> Ega23 © (25.11.05 13:29) [12]
И я про конкретные. Видел в одном банке воплощение это кошмара на оракле.
← →
svd © (2005-11-29 12:49) [14]
> Уменя есть табличка из двух полей
> ID ParentId
> Как мне получить все дерево одним запросом, т.е. я знаю
> нижний элемент а мне нужно получить верхний элемент!!!
У меня была аналогичная ситуация, когда надо было построить иерархию подразделений в организации. Запросом это сделать вряд ли можно, а вот хранимой процедурой запросто. Вместо рекурсии (ограниченной 32 уровнями) можно использовать цикл и 3 временные таблицы. В первой накапливаются записи для вывода в результат, а во второй и третьей - записи, соответствующие текущему уровню. На каждом шаге цикла содержимое второй таблицы переписывается в первую и третью, вторая очищается, после чего во вторую таблицу выбираются записи, подчиненные тем, что находятся сейчас в третьей, потом третья очищается . Цикл повторяется до тех пор, пока во вторую таблицу будет выбрана хотя бы 1 запись.
Если описал не совсем понятно - пишите, пришлю исходник процедуры.
← →
Ega23 © (2005-11-29 12:55) [15]
> иерархию подразделений в организации.
Я никогда не поверю, что глубина вложенности подразделений в этой организации будет больше 32 уровней.
Солдат
Отделение
Взвод
Рота
Батальон
Полк
Дивизия
Округ
Вооружённые силы.
Всего 9 уровней.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.013 c