Avatar billede Mik2000 Professor
19. februar 2010 - 20:48 Der er 15 kommentarer og
1 løsning

Hent fra tabel

Hej

Jeg har en tabel som sådan

id
subid
name

Den fungerer sådan at hvis vi har følgende data:
1, 0, 'Navn'
2, 2, 'Navn2'
3, 1, 'Underpunkt til navn id1'
4, 2, 'Underpunkt til navn2 id2'
5, 3, 'underpunkt til id 3 punktet'

Det jeg gerne vil er at hente alle underid'er til et givent id

Således at hvis jeg f.eks. har id 1 Navn, så skal den vi sql hente både id3 og id5 som begge er under id1

Håber du forstår ellers skriv :)
Håber du kan hjælpe
Avatar billede repox Seniormester
19. februar 2010 - 21:44 #1
Du skal lave en rekursiv funktion.

Noget ala:




  function getSubs( $subId = 0 )
  {
    $sql = "SELECT * FROM tabel WHERE subid=".$subId;
    $res = mysql_query($sql);
    if( mysql_num_rows($res) > 0 )
    {
      while( $obj = mysql_fetch_object($res) )
      {
        echo $obj->name;
        getSubs($obj->subid);
      }
    }

  }



Avatar billede Mik2000 Professor
19. februar 2010 - 22:10 #2
Okay, hvad hvis man i stedet skulle tælle alle dem der var under?
Avatar billede repox Seniormester
19. februar 2010 - 22:38 #3
Du kunne jo echo mysql_num_rows($res) istedet for at echo $obj->name? Bare en tanke...
Avatar billede Mik2000 Professor
19. februar 2010 - 23:02 #4
Men hvis det er det samlede antal hvor skal man så echo det?

For som den er der tæller den vel hvor mange der er inden for hvert id, men ikke det samlede antal den finder alt i alt
Avatar billede majbom Novice
20. februar 2010 - 07:01 #5
hvor skal du bruge det tal? du kan enten lave en query først der bare henter antal rows i tabellen, eller du kan tælle det sammen i din rekursive funktion...
Avatar billede Mik2000 Professor
20. februar 2010 - 13:14 #6
Hej, jeg skal bruge det til at kunne skrive hvor mange underpunkter der er til de forskellige.

Dvs hvormage f.eks. id indeholder (inkl alle nderunderpunkter mv) og hvor mange id 2 holder, osv osv

Så man får et tal ud for hver enkelt med hvor mange der er i dem.
Avatar billede repox Seniormester
20. februar 2010 - 17:13 #7
Har du overhovedet prøvet at lege med koden selv?


  function getSubs( $subId = 0 )
  {
    static $antal = 0;
    $sql = "SELECT * FROM tabel WHERE subid=".$subId;
    $res = mysql_query($sql);
    if( mysql_num_rows($res) > 0 )
    {
      while( $obj = mysql_fetch_object($res) )
      {
        $antal += mysql_num_rows($res);
        getSubs($obj->subid);
      }
    }
    return $antal;
  }

Avatar billede Mik2000 Professor
20. februar 2010 - 20:10 #8
Får denne fejl:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource
Avatar billede Mik2000 Professor
20. februar 2010 - 20:10 #9
I denne linje:
if( mysql_num_rows($res) > 0 )    {
Avatar billede repox Seniormester
20. februar 2010 - 20:18 #10
Har du forbindelse til databasen? Passer SQL sætningen i forhold til dit tabelsetup? Virkede mit første forslag efter hensigen?
Avatar billede Mik2000 Professor
20. februar 2010 - 20:34 #11
Hej

Nu fik jeg den til at lave noget nyt. Feltet subid var blevet omdøbt til niveau, og jeg havde glemt at ændre
getSubs($obj->niveau); 
så der stod niveau (som nu) i stedet for subid

Mit problem nu er den kører igennem rigtig mange gange

Jeg har følgende kode

function getSubs($subId = 0)  {   
    static $antal = 0;   
   
    $sql = "SELECT * FROM navne WHERE niveau=".$subId;
    $res = mysql_query($sql); 
    if( mysql_num_rows($res) > 0 )    {     
        while( $obj = mysql_fetch_object($res) )      { 
            $antal += mysql_num_rows($res);       
            getSubs($obj->niveau);     
        }   
    }   
    return $antal; 
}

// Og den køres med, hvor det her er for den række med et id der hedder 1
$subid = 1;
echo  getSubs( $subid );
Avatar billede repox Seniormester
20. februar 2010 - 20:40 #12
Ja? Det er derfor det kaldes en rekursiv funktion?
Avatar billede Mik2000 Professor
20. februar 2010 - 21:01 #13
Men bør den ikke kun køre så mange gange som der er data.

Tror den kører noget der minder om uendeligt, for siden går nærmest i stå når den loades
Avatar billede repox Seniormester
20. februar 2010 - 21:10 #14
Prøv at rette
getSubs($obj->niveau);

til
getSubs($obj->id);
Avatar billede Mik2000 Professor
18. august 2010 - 20:39 #15
Fik det til at virke men glemte at svare og det, så skriv et svar og så får du nogle noget forsinkede point :)
Avatar billede repox Seniormester
18. august 2010 - 21:10 #16
Det fik du her
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