|
Тема
|
Кое е най-оптималното решение на ...
|
|
Автор | someone (Нерегистриран) |
Публикувано | 21.03.05 22:54 |
|
Здравейте , имам следната таблица:
trees (parent , title) със записи:
parent title
null p0
p0 p1
p1 p2
p2 p3
p3 p4
p4 p5
.............................
като замисъла е да се получи нешо като нишка
p0------------------>p1----------->p2----------->p3------------>p4------------->p5 ...........
parent=null parent=p0 parent=p1 parent=p2 parent=p3 parent=p4 ....
И въпроса ми : Как да обърна нишката по-възможност без рекурсия т.е. искам да получа:
parent title
null p5
p5 p4
p4 p3
p3 p2
p2 p1
p1 p0
p5----------------->p4--------------->p3----------->p2------------>p1------------>p0 ...........
parent=null parent=p5 parent=p4 parent=p3 parent=p2 parent=p1 ......
| |
Тема
|
Re: Кое е най-оптималното решение на ...
[re: someone]
|
|
Автор | krachev (Нерегистриран) |
Публикувано | 22.03.05 13:09 |
|
Здрасти, значи хрумна ми този вариант (използвам T-SQL диалекта понеже ти не уточни базата)
insert into #trees (parent , title)
select title, parent from trees;
delete from #trees where title is null;
update #trees set title = parent, parent = null
where not exists (select title from #trees t1 where t1.title = #trees.parent )
delete from trees;
insert into trees select * from #trees;
| |
Тема
|
Re: Кое е най-оптималното решение на ...
[re: someone]
|
|
Автор |
NDeu (динозавър) |
Публикувано | 22.03.05 13:12 |
|
Може и да не съм те разбрал, но си мисля, че искаш да реализираш списък:
parent title
null p0
p0 p1
.........
pi pj
.......
p(n-1) pn
Ако добавиш и:
pn null
ще получиш лесен начин за откриване на края на списъка и съответно добавяне/премахване на елемент отпред и отзад.( Кеф ти FIFO, кеф ти LIFO)
Ако се замислиш, ще разбереш и че този списък е двусвързан, което ще рече, че лесно можеш да се движиш по него и в двете посоки. (Реализацията на Next/Prev е елементарна)
Тогава, отговора на въпроса ти: "Как да обърна нишката по-възможност без рекурсия т.е...." е :
Че той е обърнат![](http://i.dirbg.com/clubs/icons/wink.gif)
| |
Тема
|
Re: Кое е най-оптималното решение на ...
[re: someone]
|
|
Автор |
AcidMemory () |
Публикувано | 22.03.05 14:06 |
|
кажи за каква база данни иде реч (щото оракъл, примерно, има connect by нещица, с които лесно се вадят такива неща)
иначе, принципно (поне в някои случаи и аз бих подходил така), можеш да си денормализираш пътя (лесно се поддържа) в едно допълнително поле и да ползваш него (т.е. примерно id_p0<delimiter>id_p1<delimiter>id_p2..... , което лесно се парсва в последствие, а и лесно си отговаряш на разни въпроси, които те обикновено те интересуват в такива дървета)
| |
Тема
|
Re: Кое е най-оптималното решение на ...
[re: someone]
|
|
Автор | someone (Нерегистриран) |
Публикувано | 22.03.05 16:19 |
|
Здравейте , базата е mysql-4.0.20 , и цялата работа е следната :
Имам дърво без някакви ограничения за дълбочината му (и все пак надали ще надхвърли дълбочина 20-25) и целта ми е , когато посоча произволен node от дървото той да стане root т.е. нещо като "увисване на дървото" , което първоночално ми изглеждаше доста сложно , но в последствие се установи , че трябва се обърне само пътя от root-а до въпросния node и от там идва питанката ми.
| |
Тема
|
Re: Кое е най-оптималното решение на ...
[re: someone]
|
|
Автор |
mr.vain (пътник 57) |
Публикувано | 22.03.05 20:45 |
|
Само да попитам - защо си против рекурсията? Според мен в случая именно рекурсивен цикъл е най-лесния подход.
Има три вида хора. Част от проблема, част от решението и част от пейзажа.
| |
Тема
|
Re: Кое е най-оптималното решение на ...
[re: someone]
|
|
Автор |
тoшo (да бе да) |
Публикувано | 23.03.05 05:00 |
|
Хората са мислили, мислили... Редактирано от тoшo на 23.03.05 05:02.
| |
|
|
|
|