Avatar billede intenz Novice
29. juli 2004 - 10:26 Der er 6 kommentarer og
1 løsning

Kategori "træ"

Nu har jeg rodet lidt med det her i noget tid, og kan ikke helt lige lure det.

Jeg er igang med at lave en søgemaskine, hvor jeg har brug for at kunne liste alle kategorierne i et "træ" eller hvad det hedder.

Databasen er oprettet så hver kategori har et id naturligvis og så underkategorier har et felt med den kategori den tilhører.

Så vil jeg kunne liste dem sådan her:
Hovedkategori_1
  sub1
  sub1
    sub2
      sub3
Hovedkategori_2
  sub1
    sub2
  sub1

osv osv.

Nogle der har en metode til at gøre det?
Underkategorier kan jo i teorien blive uendelige.
Avatar billede Slettet bruger
29. juli 2004 - 20:39 #1
Jeg har en løsning på dit problem, men jeg har desværre ikke tid lige nu til at komme med en brugbar forklaring.

Jeg vender tilbage i morgen.

Jeg har lavet et forum med lige netop den opbygning.
Kan du bekræfte at i pricippet er det en opbygning ála www.debatside.dk?

De benytter sig af WebBBS, hvilket ikke vil fungere i din løsning, da de bruger tekstfiler, men jeg har fundet "de vise sten" ;o)
Avatar billede intenz Novice
29. juli 2004 - 20:52 #2
ja det er præcis i den stil der
Avatar billede Slettet bruger
30. juli 2004 - 13:20 #3
Jeg har en database med tråde, hvor hver tråd har følgende 3 felter (til styring af strukturen)
identnr (text)
hovedkategori (text)
tilhorsforhold (text)

Eks. (identnr - hovedkategori - tilhorsforhold)

1 (1 - 1 - NULL)
1.1 (1.1 - 1 - 1)
2 (2 - 2 - NULL)
3 (3 - 3 - NULL)
3.1 (3.1 - 3 - 3)
3.2 (3.2 - 3 -  3)
  3.2.1 (3.2.1 - 3 - 3.2)
  3.2.2 (3.2.2 - 3 - 3.2)
3.3 (3.3 - 3 - 3)
  3.3.1 (3.3.1 - 3 - 3.3)
4 (4 - 4 - NULL)

Først laves en forespørgsel der henter tråde hvor hovedkategori=identnr.
På denne måde finder du alle hovedkatergorierne.

Så laver du en while-løkke, hvori du for hver hovedtråd der findes, laves et udtræk af de poster hvor den hovedtråd du er i gang med, er lig med 'hovedkategori'.

For hver gang løkken rendes igennem, får du hovedkategoriens nr. samt alle tilhørende underposter.

Under denne while-løkke har jeg så lavet en counter der tæller alle punktummer i 'identnr'.
( $counter = strlen(ereg_replace('[^[:punct:]]','',$identnr)); )

Denne counter bruger jeg til at lave indrykninger med, f.eks. et mellemrum før hver post, for hver gang der er et punktum.

Her er et løst eksempel må den kode jeg har testet med:

// Find hovedtråde
$query_hovedtraade = mysql_query("SELECT hovedtraad
                                  FROM b91_forum
                                  WHERE beskednr = hovedtraad
                                  ORDER BY beskednr");

// For hver hovedtråd, find alle poster
while ($row_hovedtraade = mysql_fetch_assoc($query_hovedtraade))
  {
    $hovedtraad = $row_hovedtraade[hovedtraad];

    $query_forum = mysql_query("SELECT *
                                FROM b91_forum
                                WHERE hovedtraad = $hovedtraad
                                ORDER BY beskednr ASC");


    // For hver post, tæl antallet af punktummer og echo til skærmen.
    while ($row_forum = mysql_fetch_assoc($query_forum))
      {
        $identnr = $row_forum[identnr];
        $counter = strlen(ereg_replace('[^[:punct:]]','',$identnr));

        $i = 0;
        $mellemrum = "";
        while ($i < $counter)
          {
            $mellemrum = $mellemrum."&nbsp;&nbsp;&nbsp;";
            $i ++;
          }
        $forum = $forum.$mellemrum.$row_forum[identnr]."<br>";
      }

  }

echo $forum;
Avatar billede intenz Novice
30. juli 2004 - 14:51 #4
Jeg kan godt se hvor du vil hen med det. Og jeg havde ikke selv tænkt på at lave det på den måde, men nu kan jeg selv sidde og rode lidt videre med det.

Så tak for det.
Avatar billede intenz Novice
30. juli 2004 - 14:51 #5
læg lige et svar
Avatar billede Slettet bruger
30. juli 2004 - 15:03 #6
Får du problemer eller yderligere spørgsmål, må du endelig give lyd.

Det er egentlig ret simpelt, det tog bare 100 år for min lille hjerne at regne ud hvordan det skulle strikkes sammen :o)
Avatar billede intenz Novice
30. juli 2004 - 17:59 #7
Ja det skal jeg nok.
Men nu hvor jeg har ideen burde det ikke være noget problem
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