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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
1-24450
Ann
2003-08-25 15:40
2003.09.08
Компоненты в Run Time


14-24690
Мазут Береговой
2003-08-19 09:58
2003.09.08
Ну, вот и дождались!


14-24674
NAlexey
2003-08-20 09:33
2003.09.08
Фень Юань?


4-24742
ivankohut
2003-07-07 17:02
2003.09.08
Изменение вида полос прокрутки


3-24359
VID
2003-08-17 15:06
2003.09.08
FIBDataSet, Blob-поле