Главная страница
    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.46 MB
Время: 0.007 c
1-24444
EAlexander
2003-08-25 16:40
2003.09.08
Про unicode


14-24663
uw
2003-08-20 15:45
2003.09.08
Мужчины скоро вымрут


1-24523
Vitalygavrilov
2003-08-27 06:54
2003.09.08
Как привезать к своей проге мой www


14-24619
DeMoN-777
2003-08-21 09:15
2003.09.08
Оптимизация jpg


1-24411
VISA
2003-08-26 13:04
2003.09.08
Горячие клавиши





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