[PHP] Folders opbouwen vanuit een database

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • avdwerf
  • Registratie: Maart 2007
  • Laatst online: 10:25
Nou ik ben dus nog steeds bezig met die filemanager, met de bestanden gaat het nu perfect, maar nu zit ik met een volgend probleempje. Ik heb dus ook een tabel mappen waarin de mappenstructuur wordt bijgehouden, die ziet er als volgt uit:

folder_id
folder_subid
folder_name

Als folder_subid 0 is, dan is het een rootmap, anders is folder_subid de folder_id van de map waar hij in moet staan. Dit zit zo volgens mij wel goed in elkaar en dat werkt ook wel, maar hoe kan ik het nu het beste gaan doen als ik bijv. een submap in een submap in een submap enz... heb...

Als je een vast aantal submappen hebt is het makkelijk te maken door
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$result = SELECT * FROM folder WHERE folder_id=0
while($row=mysql_fetch_array($result) {
    $id = $row["id"];
    $naam = $row["naam"];
    echo $naam;
    $sub_result = mysql_result(SELECT * FROM folder WHERE folder_id=$id);
    while($sub_row = mysql_fetch_array($sub_result)) {
        $sub_id = $sub_row["id"]
        $sub_naam = $sub_row["naam"]
        echo $naam;
        enz. enz. enz.
    }
}

Maar dit werkt niet echt goed, omdat er niet een vast aantal submappen is, en het mij ook niet de beste oplossing lijkt om zo 20 lussen in elkaar te maken... Iemand een ideetje hoe ik dit beter kan doen?

[ Voor 13% gewijzigd door RobIII op 25-04-2007 16:10 ]


Acties:
  • 0 Henk 'm!

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
gebruik een functie die zichzelf weer aanroept met nieuwe parameters...

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Keyword: Recursie :Y)
A common geeky joke (for example [1]) is the following "definition" of recursion.
  • Recursion
    • See "Recursion".
en:
  • Recursion
    • If you still don't get it, See: "Recursion".
Oh, en als je code post, wil je dan voortaan zo vriendelijk zijn om code tags te gebruiken? Dank je ;)

[ Voor 142% gewijzigd door RobIII op 25-04-2007 16:11 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Je zou er een recursieve functie van moeten maken. :)

[modje] uhm.., moet toch eens aan mijn snelheid werken...[/modje]

[ Voor 93% gewijzigd door Verwijderd op 25-04-2007 16:13 ]


Acties:
  • 0 Henk 'm!

  • remco_k
  • Registratie: April 2002
  • Laatst online: 17:44

remco_k

een cassettebandje was genoeg

^^ met hen...
1 kleine opmerking, ik vind folder_subid een beetje vreemde benaming om de parent aan te geven.
Daarom zou ik deze kolom liever folder_parentid noemen.
Als er dan iemand anders in je tabel kijkt, weet hij meteen wat daarmee bedoeld word.

Alles kan stuk.


Acties:
  • 0 Henk 'm!

  • Pin0
  • Registratie: November 2002
  • Niet online
Bij grote aantallen kan recursie langzaam worden en zeker database queries wil je er zo min mogelijk uitvoeren. Je wilt een boomstructuur opslaan in een tabel. Ik heb dit ook gedaan in een cms. voor site navigatie ed. en wel met behulp van de Modified Preorder Tree Traversal methode. Ik heb toen veel gehad aan dit artikel: http://www.sitepoint.com/...rarchical-data-database/2
Je kan dan met één query de hele boom uitlezen. Een node toevoegen moet in twee queries geloof ik.

Ik zie ook dat je het over bestanden hebt ed. Kan je niet gewoon de directories op de server uitlezen met de daarvoor aanwezige php functies of wil je bepaalde kenmerken toevoegen aan de bestanden en heb je daarvoor een database nodig?

Mijn Lego Mocs - LEGO idea: The Motorcycle Garage


Acties:
  • 0 Henk 'm!

  • avdwerf
  • Registratie: Maart 2007
  • Laatst online: 10:25
*edit*

how er was al weer wat meer gepost, ik ga het ff doorlezen...

[ Voor 75% gewijzigd door avdwerf op 25-04-2007 16:31 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
avdwerf schreef op woensdag 25 april 2007 @ 16:28:
Maar als ik een functie daar voor maak dan blijft het toch nog steeds hetzelfde, kun je anders een voorbeeld geven?
Wij zien liever dat je even zelf wat inspanning doet (lees: zoeken/googlen) voordat je om kant-en-klare oplossingen vraagt. Zie ook scriptrequest.

De link in de post van pin0 bevat overigens voorbeeldcode. Het is ook nog eens een elegantere manier van je tree opslaan, hoewel het extra werk zich niet loont bij kleine trees (IMHO). En er is meer dan voldoende over te vinden hier op GoT maar ook op Google.

[ Voor 21% gewijzigd door RobIII op 25-04-2007 16:33 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50

BikkelZ

CMD+Z

Pin0 schreef op woensdag 25 april 2007 @ 16:18:
Bij grote aantallen kan recursie langzaam worden en zeker database queries wil je er zo min mogelijk uitvoeren. Je wilt een boomstructuur opslaan in een tabel. Ik heb dit ook gedaan in een cms. voor site navigatie ed. en wel met behulp van de Modified Preorder Tree Traversal methode. Ik heb toen veel gehad aan dit artikel: http://www.sitepoint.com/...rarchical-data-database/2
Je kan dan met één query de hele boom uitlezen. Een node toevoegen moet in twee queries geloof ik.

Ik zie ook dat je het over bestanden hebt ed. Kan je niet gewoon de directories op de server uitlezen met de daarvoor aanwezige php functies of wil je bepaalde kenmerken toevoegen aan de bestanden en heb je daarvoor een database nodig?
Dit is inderdaad de manier om het te doen. Dit is wel echt bikkelniveautje, heb hier echt aardig wat koppijn van gekregen om het goed werkend te krijgen in mijn situatie.

iOS developer

Pagina: 1