Avatar billede Mik2000 Professor
24. april 2008 - 10:20 Der er 8 kommentarer og
1 løsning

Find niveau

Jeg har en tabel i en database med en menu i.

Der er (simpliceret):
id
subid
menunavn

Hvis et menupunkt har undermenupunkter, så er subid det samme som id'et i overmenupunktet

Eksempel (id, subid, menunavn)
1, 0, Menupunkt 1
2, 0, Menupunkt 2
3, 2, Undermenupunkt til Menupunkt 2
4, 1, Undermenupunkt til Menupunkt 1
5, 4, Undermenupunkt til ovenstående menupunkt (3. niveau)

Der kan være flere niveauer endnu

Nu er mit problem så at jeg skal finde ud af hvilket niveau et menupunkt er.
Det første niveau er altid 0 i subid så det er nemt.
Men er det muligt at finde ud af hvilket niveau andre punkter har?
Avatar billede coderdk Praktikant
24. april 2008 - 10:43 #1
Hmm helt utestet. Noget rekursivt i denne stil burde virke:

function getLevel($id, $level = 0)
{
  $sql = "SELECT subid FROM menutabel WHERE id = " . $id;
  $qh = mysql_query( $sql ) or die( mysql_error() );
  if ( mysql_num_rows( $qh ) > 0 )
  {
      $row = mysql_fetch_assoc( $qh );
      mysql_free_result( $qh );
      if ( $row['subid'] == 0 )
      {
          return $level;
      }
      return getLevel( $row['subid'], $level + 1 );
  }
  return $level;
}


Eller den iterative tilgang:

function getLevel( $id )
{
    $level = 0;
    $curid = $id;
    while ( true )
    {
        $sql = "SELECT subid FROM menutabel WHERE id = " . $curid;
        $qh = mysql_query( $sql ) or die( mysql_error() );
        if ( mysql_num_rows( $qh ) == 0 )
        {
            break;
        }
        $row = mysql_fetch_assoc( $qh );
        mysql_free_result( $qh );
        if ( $row['subid'] == 0 )
        {
            break;
        }
        $curid = row['subid'];
        $level++;
    }
    return $level;
}
Avatar billede Mik2000 Professor
25. april 2008 - 00:25 #2
Begge to kommer med denne fejl:
Fatal error:  Cannot redeclare getlevel() (previously declared in sider_opret.php:101 in sider_opret.php on line 101

Kører den sådan:
$id = $menuadmin0[0];
$level = getLevel($id);
Avatar billede Mik2000 Professor
25. april 2008 - 00:26 #3
(den sidste)
Avatar billede coderdk Praktikant
25. april 2008 - 01:20 #4
Ok, weird - Og du paster kun den ene, ikke? Prøv at rename dem til noget andet, findLevel eller lign. (i den rekursive husk at ændre inde i funktionen også)...
Avatar billede Mik2000 Professor
26. april 2008 - 13:14 #5
:(:(:(:(:(:(

Det var mig der havde dummet mig..... havde bare lagt den ind for at teste men var kommet itl at ligge den i en løkke :( øv hehe

Men det virker så det er super :):):):)

Så smid et svar og så er der endnu engang point

Mange tak for det :)
Avatar billede coderdk Praktikant
26. april 2008 - 13:36 #6
hehehe ok :)
Avatar billede Mik2000 Professor
26. april 2008 - 16:34 #7
Tak for hjælpen :) .... endnu engang
Avatar billede olebole Juniormester
26. april 2008 - 16:47 #8
<ole>

Skal du hente level-værdien væsentligt ofterer, end du retter i menuen (f.eks. én eller flere gange i en bruger-session), vil det nok kunne betale sig at oprette et ekstra felt i DB'en - og lægge level-værdien her.

Så skal du kun bladre tabellen rekursivt igennem, når du retter i den - ikke hvergang en bruger skal bruge menuen  ;o)

/mvh
</bole>
Avatar billede Mik2000 Professor
26. april 2008 - 17:18 #9
Hej

Tak for svaret

Det er kun når der oprettes nye sider så den ikke kan oprettes i et niveau der er længere nede end menuscriptet tillader
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