Avatar billede lubker Nybegynder
24. oktober 2005 - 09:40 Der er 15 kommentarer og
1 løsning

sortering / løkkeudskrivning fra mysql.

Jeg har en tabel opbygget på følgende måde

id | over  | mappenavn
1  | home  | mappe 1
2  | home  | mappe 2
3  | mappe1 | undermappe 1
4  | mappe1 | undermappe 2

Dette vil jeg gerne have udskrevet med lidt mappestruktur, som kendes fra stifinder.
Mapperne skal vises så di ligger i den mappe, hvis navn ligger i kolonnen over.

ex:
home
  mappe1
      undermappe 1
      undermappe 2
  mappe2

Hvordan kan jeg lave denne sortering?!?
Avatar billede net-base.dk Nybegynder
24. oktober 2005 - 10:25 #1
Du skal lave en function som henter alle ellementer med en bestemt navn fra |over| denne function skal så kalde sig selv, i den while løkke du laver i dit udtræk, og kalder du så functionen igen...

Jeg kan lave en hurtig kode, som du kan redigere til dit behov.
Avatar billede lubker Nybegynder
24. oktober 2005 - 10:28 #2
Jeg har selv forsøgt lidt i samme stil, men havde svært ved at se hvordan whileløkken skulle opbygges til formålet.
Du må meget gerne lave et lille eksempel.
- Vil også gerne give lidt flere point.
Avatar billede net-base.dk Nybegynder
24. oktober 2005 - 10:31 #3
<?php

function hent($var)
{
    $sql = "SELECT * FROM [tablename] WHERE over = '".$var."'";
    $result = mysql_query($sql);
    while( $row = mysql_fetch_array( $result ) )
    {
        if( mysql_num_rows($result) < 0 )
        {
            echo $row["mappenavn"]."<br>";
            hent($row["over"]);
        }
    }
}

?>

Denne kode skulle kunne klare det for dig... den skal self. rettes til så den passer til dit system, ved det kan lade sig gøre, har før lavet noget i stil, bare hvor den heltede personer og så hente de personer som var under ovs.
Avatar billede net-base.dk Nybegynder
24. oktober 2005 - 10:31 #4
Ja du skal selv. lige klade functionen til at starte med også.
Avatar billede lubker Nybegynder
24. oktober 2005 - 10:41 #5
Skal egentlig bruge den så den bliver ved med at hente, til der ikke er flere undermapper.
Men det kan funktionen ovenfor jo ikke helt klare, og det var egentlig der jeg fik problemet.
Avatar billede net-base.dk Nybegynder
24. oktober 2005 - 11:24 #6
Du kan den faktisk godt...

Du kalder den med: hent("home"); og så starter den, hvergang den så er inde i løkken for at printe, så kalder den sig selv. og med det som står i over, hvor den så kører og søger efter alle dem som har det punkt den lige har pruntet stående i over... personligt havde jeg skiftet over ud med p_id for parrentid. havde været smartere... men fuck det...

Det skulle virke... efter hensigten. nu har jeg desværre ikke nogen database jeg kan teste det på...
Avatar billede lubker Nybegynder
24. oktober 2005 - 11:29 #7
Det er da egentlig rigtigt.
hvorfor skal antallet af rækker være "mindre" end 0? Det syntes jeg da ikke giver så meget mening.
Avatar billede net-base.dk Nybegynder
24. oktober 2005 - 11:33 #8
Den tester på om altallet af rækker er højere end 0. det vil sige mindst 1.
Avatar billede lubker Nybegynder
24. oktober 2005 - 11:37 #9
Ja, men den kører jo kun
echo $row["mappenavn"]."<br>"; hent($row["over"]);
hvis antallet af rækker er under 0.
Avatar billede net-base.dk Nybegynder
24. oktober 2005 - 11:57 #10
min fejl... den skal self. vende den anden vej....

if( mysql_num_rows($result) > 0 )

Sorry...
Avatar billede lubker Nybegynder
24. oktober 2005 - 12:26 #11
Det rettede jeg den også selv til, meen så kommer der for alvor fejl, da den kalder den funktion den allerede er igang med.

Det kan den vist ikke klare.
Avatar billede net-base.dk Nybegynder
24. oktober 2005 - 12:41 #12
Jo det kan godt lade sig gøre... har gjort det før...

Nu har jeg som sagt ikke mulighed for at teste den kode da jeg ikke selv har den database...

Så koden må du selv se om du kan tilrette så den kommer til at virke...

Vil være for besværligt for mig at sidde og oprette da tabel med det ønskede indhold
Avatar billede lubker Nybegynder
24. oktober 2005 - 12:46 #13
Ja, selvfølgelig.
Men efter > blev rettet, kommer der en fejlmmeddelelse fra apache: "Unhandled expection in Apache.exe (NTDLL.DLL) Stack overflow".
Hvilket ikke burde komme.
Avatar billede net-base.dk Nybegynder
24. oktober 2005 - 12:55 #14
<?
function hent($var)
{
        $sql = "SELECT * FROM [tablename] WHERE over = '".$var."'";
        $result = mysql_query($sql);
        while( $row = mysql_fetch_array( $result ) )
        {
                echo $row["mappenavn"]."<br>";
                hent($row["id"]);
        }
}

hent("over");
?>

Sådan denne kode virker... har lige oprettet den tabel hurtigt. og testet koden...

Se den her:
http://62.66.210.132/testcode/foldertest.php
Avatar billede lubker Nybegynder
24. oktober 2005 - 13:00 #15
Ja, havde lavet en lille fejl i hent() inden i løkken...

Tak for hjælpen. Lægger du et svar?
Avatar billede net-base.dk Nybegynder
24. oktober 2005 - 13:01 #16
Svar...
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