SQL baseret mappesystem

Tags:    php

<< < 12 > >>
Jeg er igang med at lave et mappesystem fuldt ud baseret på mySQL. Systemet er bygget sådan at brugeren kan indsætte mapper i systemet til det uendelige.

Dette gør så at jeg ikke helt kan greje hvordan brugeren skal få mulighed for at slette mapper. Er der nogen der kan hjælpe mig med en ide til at kunne slette alle undermapper, samt undermapper i undermapper osv.

Min kode er som følgende:
Fold kodeboks ind/udKode 




11 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Hvis der forefindes en undermappe, kalder funktionen sig selv, blot med id'et på undermappen...

Prøver med et par kommentare:
Fold kodeboks ind/udKode 


For bedre at forstå koden:

Vi har mappestruktur der ser således ud:

rod (id = 1)
|--Level 1 mappe 1(id = 2)
|--level 1 mappe 2(id = 3)
|--level 2 mappe 1(id = 4)

Vi vil slette rod mappen, med alle undermapper:
delTree(1)

Funktionen er nu kaldt med id'et på rodmappen.

Den finder 2 undermapper, funktionen kaldes for hver undermappe. Funktionen tjekker om der findes undermapper, der findes to. Den ene (id = 2) har ingen undermappe, og slettes bare, den anden (id = 3) har en undermappe, og funktionen kaldes (delTree(3)) og finder sletter undermappen.
Når den sidste undermappe er slettet i en mappe, slettes mappen selv.

Funktionen sletter altså den nævnte mappestruktur således:
id = 2
id = 4
id = 3
id = 1

Den starter med at slette den undermappe der er længst væk fra rodmappen, og derfra mod rodmappen.



Problemet er jo at med dit script kan du kun slette undermapper med et lvl nede.
Problemet er jo umiddelbart at der kan forefindes mange flere levels såsom:

mappen
|-undermappe
   |-undermappe2
      |-undermappe3
         |-undermappe4

osv. ud i det uendelige. Det er hvad der menes med dybde. Det er ganske flot at du kan oprette uendeligt antal mappe i dit system, men det er overhovedet ikke hvad der menes.



Indlæg senest redigeret d. 12.11.2006 12:58 af Bruger #10132
Jeg har lavet et CMS med et "side træ"-system.

I mit system har jeg følgende felter:
id, navn, ejer

Hvis der ikke er en ejer til, i dit tilfælde, mappen får den ejer=0 ellers får den id'et på den mappe den er i.

Eks.:
Fold kodeboks ind/udKode 



For at slette en mappe, samt alle undermapper skal der laves en rekursiv funktion.

Eks.:
Fold kodeboks ind/udKode 


Ovenstående kode er lavet efter hukommelsen, kan være den ikke virker. Hvis ikke, kan du jo skrive igen.



Problemet er at dit system er begrænset. Det system jeg har lavet bygge jo på samme koncept som en harddisk, hvor der er ubegrænset dybde i antallet af mapper der kan oprettes.



Min funktion kan også bruges på et ubegrænset antal mapper.

Den er ligeglad med om der er 2 mapper eller 1 mia mapper den skal slette, den sletter dem alligevel.



Ahhh ja, tror faktisk jeg har set lyset nu også måske endda gemme, alle id's i et array og afslutte den med foreach{}. Det må da være det mest stabile?



Er ikke helt med på hvad du mener...

Mener du at du vil gemme alle mappe-id'erne i et array og derefter slette med med foreach?

I så fald bliver udførelsestiden af funktionen forlænget...



Ja, det var planen da jeg ellers ikke kan se logikken i dit script.



Min funktion sletter mapperne med det samme...



Ha prøvet din kode nu, men det lader til at den danner en uendelig løkke. Det ville være super med lidt yderligere support :D

Fold kodeboks ind/udKode 




<< < 12 > >>
t