Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.015 c
14-1132214544
ЯВ
2005-11-17 11:02
2005.12.18
комп-щик на нары...


2-1133134310
бетта тест
2005-11-28 02:31
2005.12.18
Если нажать Ctrl+Shift+G, то появляется какое то число


4-1129312446
Fay
2005-10-14 21:54
2005.12.18
Переключить раскладку их хука


1-1131656188
Silver...
2005-11-10 23:56
2005.12.18
Динамически создать Action в TActionList-e


2-1133204119
Formcreater
2005-11-28 21:55
2005.12.18
Не могу динамически создать кнопку на форме.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский