Avatar billede ostehamster Nybegynder
10. november 2004 - 18:42 Der er 3 kommentarer og
2 løsninger

Hvis alle led i et hieraki?

Hejsa

Jeg har en mappe struktur i MySQL, hvor hver mappe har et "id" og "pid", hvor "pid" svare til et "id". På den måde kan man så for hver mappe, finde undermapper ved at finde alle de mapper hvis "pid" er lig mappen "id".

Meget trivielt.

Nu kunne jeg tænke mig, at hvis jeg var i mappen med id 20, så finde alle de led der er inden denne mappe. Jeg har prøvet at lave det med JOINS, men kan ikke rigtig finde ud af det, da det nemt bliver noget med at man helst skal hvor mange led der er før.

Er der ikke en måde, hvorpå mysql selv kan finde ud af dette? Der er jo trodsalt en del der har lavet samme tricks før mig :)

mvh
Christoffer
Avatar billede arne_v Ekspert
10. november 2004 - 18:58 #1
måske en self join:

SELECT m2.navn
FROM mappe m1,mappe m2
WHERE m1.navn='xxxx' AND m1.id=m2.pid
Avatar billede linebp Nybegynder
11. november 2004 - 02:07 #2
Du kan ikke med et enkelt SELECT vælge en mappe og alle dens undermapper, hvis de kan være vilkårligt dybt nestede. Det kræver noget vendorspecifikt SQL, oracle har en START WITH og CONNECT BY klausul som ville kunne klare det. Så vidt jeg ved har MySQL ikke noget tilsvarende.

Forslaget ovenover kan klare en mappe og niveauet under. Hvis der er en grænse for hvor dybt dit mappetræ kan blive, kan det udvides til at klare flere niveauer, for eksempel for en mappe, dens undermapper og deres undermapper ville det sådan ud:
SELECT *
FROM mappe m1, mappe m2, mappe m3
WHERE m1.id = 20
  AND m2.pid = m1.id
  AND m3.pid = m2.id
Avatar billede ostehamster Nybegynder
14. november 2004 - 20:27 #3
Øv bøv, så bliver jeg nød til at lave en loop i PHP der køre indtil pid = 0, og så måske maks 20 poster, bare for en sikkerhedsskyld :)

Arne, smidder du ikke et svar?

/Christoffer
Avatar billede arne_v Ekspert
14. november 2004 - 20:30 #4
ok
Avatar billede ostehamster Nybegynder
14. november 2004 - 20:37 #5
Så takker jeg for begge svarene ;)
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
Computerworld tilbyder specialiserede kurser i database-management

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