Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.18;
Скачать: CL | DM;

Вниз

Дерево   Найти похожие ветки 

 
Рафик ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.031 c
14-1133177174
*Pavel
2005-11-28 14:26
2005.12.18
Перехват записи в файл


1-1132732615
Ega23
2005-11-23 10:56
2005.12.18
override-функция, она уже virual?


4-1129487692
Швч
2005-10-16 22:34
2005.12.18
Как вставить рисунок JPG на фон ListView


1-1132798674
konrads
2005-11-24 05:17
2005.12.18
Определить сменный диск


2-1133328961
Laymer
2005-11-30 08:36
2005.12.18
TSQLConnection