Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.09.08;
Скачать: [xml.tar.bz2];

Вниз

Сложная выборка, прошу совета у Гуру   Найти похожие ветки 

 
SergeyV   (2003-08-18 17:02) [0]

Хотя вопрос возможно кому-то покажется и ламерским но все же...
(лично я считал что это просто до тех пор пока сам не попробовал)

Имеется некоторая таблица вида

ID Pole_2 Pole_3 Pole_4 .....

При этом в Pole_4 может содержать значение совпадающее с каким-либо значением в поле ID (кроме собственной записи) или 0.
Необходимо сделать выборку по какому-то ID при чем если в Pole_4 встречается ID другой записи необходимо добавить и ее.

Проблема в том что степень вложенности переменная от нуля и до 10-20 пунктов. При этом зацикливания не происходит (это контролируется на этапе формирования данных)

Пробовал организовать цикл на курсорах но запутался, в таблице появились двойные значения. Видимо не обойтись без #TempTable.

Уважаемые Гуру, подскажите решение пожалуйста.


 
Соловьев   (2003-08-18 17:06) [1]

дерево+дети?


 
ermserg   (2003-08-18 17:07) [2]

pochitay pro Tree-strukturi v faqe


 
MsGuns   (2003-08-18 17:09) [3]

Не совсем понял - в Pole_4 содержится или 0 или ссылка на поле ID этой же таблицы ? И вообще что-то подсказывает, что здесь пахнет деревом ;))


 
MsGuns   (2003-08-18 17:13) [4]

Если это дерево, то одно из решений - написать вьюху, которая будет содержать 3 поля вместо 2:

ID записи
ID родителя
ID верхнего узла (с которого идет разузлование)

Из этого НД удобно высекать любую ветку вместе со всеми ее сучками и листьями


 
ZrenBy   (2003-08-18 17:13) [5]

http://www.sql.ru/forum/actualthread.aspx?bid=1&tid=26347


 
SergeyV   (2003-08-18 17:18) [6]

To MsGuns
Да, это действительно дерево.
Вот только в качестве известного выступает корень.
А дети (ветки) могут меняться от случая к случаю (как пользователь задаст). Так что для них определять родителя несколько неудобно.
Проблема в том что нужно идти не от детей к родителям (это было бы проще) а наоборот.
В качестве известного берется некоторый ID и далее по нему нужно раскрутить в отдельную таблицу всю структуру.


 
Соловьев   (2003-08-18 17:21) [7]


> SergeyV (18.08.03 17:18) [6]

получить всех детей родителя?


 
SergeyV   (2003-08-18 17:22) [8]

Ктому же следует учесть что корней то унас несколько
и одна и таже ветка может быть вложена на уровне 2 для одного корня и на уровне 7 для другого, а также и сама являться корнем.


 
Соловьев   (2003-08-18 17:23) [9]

"чернобыльское дерево" надо сказать. :)


 
Соловьев   (2003-08-18 17:24) [10]

граф?


 
MsGuns   (2003-08-18 17:41) [11]

Че-то похоже на состав заказов (см Соловьев © (18.08.03 17:24) [10]). Когда-то мы делали так:
К основной таблице, содержащей пару ID -> Paren ID мы "рисовали" (создавали как временную) зеркальную с парой ID -> Child ID и т.о. существенно ускоряли разузлование в обе стороны.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.09.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
1-24495
servs
2003-08-22 18:59
2003.09.08
Глобальный отлов exception


3-24316
Max Zyuzin
2003-08-14 14:20
2003.09.08
Connection to Oracle


14-24689
Tvister
2003-08-19 17:21
2003.09.08
Скачал (после некоторго перерыва) Дайджесты форумов и ужаснулся


11-24395
К
2002-10-30 11:44
2003.09.08
КОЛ в Буилдере?


4-24751
Nikkk
2003-07-07 12:22
2003.09.08
IsWindowVisible





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский