Avatar billede styrk Nybegynder
26. oktober 2008 - 15:54 Der er 4 kommentarer og
2 løsninger

find top lvl id

Hejsa.

Jeg har lavet en slags mini cms hvor det er muligt at oprette uendelige sider og undersider.

Så lad os antage at min side struktur ser sådan ud

- id1:parent0: side1
- id2:parent1: underside til side 1
- id3:parent2: underside til underside id2

Jeg kunne godt tænke mig en metode at finde det første id på, altså første level, når jeg kun kender id3.

Jeg har selv lavet en metode som simpelthen bare looper sig igennem fra id3 parent også op til toppen hvor parent vil være = 0, jeg synes dog ikke det virker ret hensigtsmæssigt (?).

Findes der et smart metode-kald i sql som kan "loope" tilbage igennem min parent/id struktur for at finde f.eks top lvl id'et?

Håber du forstår mit spørgsmål ;-)
Avatar billede coderdk Praktikant
26. oktober 2008 - 21:45 #1
Den løsning du gerne vil undgå, er den rigtigste. I Oracle kan du lave det i én SQL vha. CONNECT BY PRIOR, men i MySQL og andre, er løsningen blot at loope indtil du finder den du leder efter.
Avatar billede pidgeot Nybegynder
27. oktober 2008 - 09:32 #2
Et alternativ kunne være at lave strukturen om så du bruger et nested set. Læs http://dev.mysql.com/tech-resources/articles/hierarchical-data.html - der er også angivet en metode til at hente en hel "sti" til et givent menupunkt.
Avatar billede j4k0b Nybegynder
27. oktober 2008 - 09:58 #3
coderdk > Når databasen bliver stor (større?) kan det spare en masse tid og cpu at lave en stored procedure der laver et rekursivt kald og returnerer en "flad" liste. Det går noget hurtigere end med alt den snak frem og tilbage mellem webserver og database. Hvis du ikke bruger en stored procedure kunne jeg forestille mig at en eller anden form for cache bliver nødvendig. Jeg har aldrig arbejdet med det i MySQL, så kender ikke mulighederne, men i eks. PostgreSQL er det et lille arbejde.
Avatar billede styrk Nybegynder
27. oktober 2008 - 21:17 #4
okey, tak for jeres svar. Jeg vil kigge lidt på dit link pidgeot.

Havde håbet der var en mere "simpel" måde, selvom metoden med at loope sig selv som jeg har lavet er ret simpel i forvejen :-)

Læg et svar drenge.
Avatar billede coderdk Praktikant
27. oktober 2008 - 21:50 #5
;P
Avatar billede pidgeot Nybegynder
27. oktober 2008 - 22:15 #6
Værsgo. :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester