rekursiv Frage

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • rekursiv Frage

    Hallo zusammen,

    ich habe folgendes Problem:

    in meiner Datenbank befinden sich Artikelgruppen die X unter-Artikelgruppen haben können. Um das darzustellen will ich das verzeichnis Rekursiv auslesen. Meine Tab sieht so aus:

    ID orderby abtID groupID parent
    1 0 1 1000 0
    2 0 1 1100 1000
    3 0 1 1110 1100
    4 0 1 1200 1000
    meine Rekursiv Funktion so:

    PHP-Code:



    <?php
    include("config.php.inc");


    //MySQL Connection
    mysql_connect($sqlhost,$sqluser,$sqlpass) OR DIE( "Couldn't connect to MySQL server!");
    mysql_select_db($database);



        
    $groups_query        mysql_query("select groupID from itemgr") or db_die();
        
    $groups_num           mysql_num_rows($groups_query);    
        
    $groups               mysql_fetch_row($parent_query);

    for(
    $i=0$i<=$groups_num$i++)

        {
        
        
    rekursiv($groupID);    
            
        }


    function 
    rekursiv($groupID)

    {
        
                
    $parent_query        mysql_query("select ID from itemgr where parent='$groupID'") or db_die();    
                
    $parent_key        mysql_fetch_row($parent_query);
                
                echo 
    "Parent: $groupID";
                echo 
    "Gruppe: $parent_key[0]";
                
                
                if(
    $parent_key)
                
                {
                    
                    
    rekursiv($groupID);
                    
                }

        
    }

    ?>


    [B]Edit: die Echos sind natürlich nur zum Test[/B]

    Gedacht hab ich mir das hald so:
    in der For Schleife hol ich mir erstmal alle Artikelgruppen. Dann schau ich in meiner Rekursiv Funktion für jede der Gruppen nach, ob sie als Parent vorhanden sind. wenn ja ( If $parent_id ) schau nochmal nach ob noch eine dabei is.

    Funktionieren tuts leider ned, hab schon gegoogled und im forum gekuckt, aber ich komm nicht drauf... seht ihr einen Fehler oder sollte ich das vielleicht anders machen?

    für schnelle Hilfe wär ich sehr dankbar!!!

    Danke im vorraus,

    gz Neroringer
    Live is a bitch... so fuck it

  • #2
    Ich würde das mittels LEFT JOIN machen...

    Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
    sondern mit den Augen das Manual zu lesen.

    Kommentar


    • #3
      versteh ich ned... gehts vielleicht auch genauer? wie soll das mit nem leftjoin funktionieren, wenn es X unterverzeichnisse gibt/geben kann? dann muss ich den left join ja im rekursiv machen, mein problem liegt aber darin dass das rekursiv nicht funktioniert...
      Live is a bitch... so fuck it

      Kommentar


      • #4
        forum suche: Link

        Kommentar


        • #5
          hatte ich auch schon gefunden, da versteh ich aber nur noch bahnhof tut mir leid...

          das soll ein artikelgruppen baum werden der sich beim klicken aufklappt:

          0 root
          1000 papier
          1100 blockpapier
          1200 druckpapier
          2000 toner
          3000 dies und das


          soll sich nur auf klick aufbauen... hat niemand dazu ein beispiel? das mit den leftjoins ist absolut unbrauchbar für mein vorhaben :-(
          Live is a bitch... so fuck it

          Kommentar


          • #6
            Original geschrieben von neroringer
            das mit den leftjoins ist absolut unbrauchbar für mein vorhaben :-(
            Jepp

            schau mal hier: http://www.php-resource.de/forum/sho...threadid=44274

            Kommentar


            • #7
              das ist zwar für mssql aber die logik bringt mich ein großes stück weiter, vielen dank schonmal!!
              Live is a bitch... so fuck it

              Kommentar


              • #8
                Funktioniert leider noch nicht so ganz. Habe das Script von Asp2net (danke dafür nochmal) auf meine bedürfnise angepasst, das sieht jetz so aus:

                Nav.php <- Die Stelle an der der Baum erscheinen soll
                PHP-Code:

                  
                include_once('treeclass.php');
                  
                // Einrückungstrenner
                  
                $ImgDelimiter "&nbsp;";
                  
                //Datei im Link
                  
                $NaviFile $menulink;
                  
                //$Navi = new TreeNavi($ImgDelimiter,$NaviFile);
                  
                if (!isset($_GET['menu']))  // 1. Aufruf
                      
                $Navi->selected[0] = 0;
                  else  
                // sonst
                      
                $Navi->selected explode('|'$_GET['menu']);
                  
                // Navi ausgeben
                  
                echo $Navi->Get_Tree(0,''); 
                treeclass.php
                PHP-Code:

                <?php
                include("config_db.inc.php");


                //MySQL Connection
                mysql_connect($db_host,$db_user,$db_pass) OR DIE( "Couldn't connect to MySQL server!");
                mysql_select_db($db_name);

                function 
                Get_Tree($parent_id,$pos
                    { 
                        static 
                $stage 0// important
                        
                static $menu '';
                        
                        if (!
                $this->_init// init not ok
                        
                {
                            
                $this->_add_error('Init',-1000,'not able to initialize this class.');
                            return 
                false;
                        }
                        
                          
                $sql         mysql_query("select * from itemgr where parent='$parent_id'") or db_die();
                                
                    
                        if (
                $this->has_errors()) {
                            echo 
                '<pre>';
                            
                print_r($this->return_errors());
                            echo 
                '</pre>';
                            exit();
                        }
                        
                $count        mysql_num_rows($sql);
                        
                // get current menu from database
                        
                        
                for ($i=0;$i<$count;$i++) { 
                            
                $row mysql_fetch_row($sql);
                            if (
                $stage 0) {
                                
                $menu .= str_repeat($this->_delimiter."\n",$stage);
                            } 
                            
                $menu .= "&raquo;&nbsp;<a href=\"".$this->_menu_file."?menu=".$pos."|".$row['lid']."\">".htmlentities($row['strname'])."</a><br />\n"
                            if (
                $row['lid'] == $this->selected[$stage+1]) { 
                                
                $stage++; 
                                
                $this->Get_Tree($row['lid'],$pos.'|'.$row['lid']); // function call itself
                                
                $stage--;
                            } 
                        } 
                        return 
                $menu;

                    }
                ?>

                ergibt folgende Meldung:
                Fatal error: Call to undefined method stdClass::Get_Tree() in C:\apache\htdocs\webapp\entwicklung\cfb3\nav.php on line 53
                weiss jemand Rat? hab ich was falsch gemacht?
                Live is a bitch... so fuck it

                Kommentar


                • #9
                  $Navi ist kein Objekt, denn die Erzeugung hast du auskommentiert.

                  Kommentar


                  • #10
                    Original geschrieben von neroringer

                    weiss jemand Rat? hab ich was falsch gemacht?
                    ähm ... wo hast du denn die Klasse implementiert?

                    Wenn du nur die Funktion haben willst, dann musst du auch als Funktion aufrufen und nicht als Objekt-Methoden, d.h. du musst die Funktion nochmals anpassen.

                    Kommentar

                    Lädt...
                    X