PHP - Galerien Listung - REKURSION

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

  • PHP - Galerien Listung - REKURSION

    Hi Leute!

    Irgendwie steh ich grad mal wieder aufm Schlauch! Ich hab hier so nen blöden Knick in meiner Logik, dass ich mich an euch wenden muss!

    Szenario: Eine DB liefert folgenden Table..:
    Gallery (id, name, issub, subof)

    Via Rekursion soll nun eine Art Directorylisting erstellt werden. Mein bisheriger Ansatz:

    PHP-Code:
    function try1() {

    SELECT bla FROM Gallery WHERE issub 0;
    WHILE(
    result) {
      
    SELECT blubb FROM Gallery WHERE issub=AND subof=bla[id]
      if (
    result) {
        function 
    try1();
      }
    }


    Funzt aber leider nicht -> Ab der 3. Instanz wird alles falsch geschachtelt! Das ganze soll so aussehen:



    Irgendwie sollte ich da zwei functions haben; Eine die alle Hauptgalerien auflistet und an Hand der ID die Subgalerien; Ich krieg's aber nicht hin!
    Zuletzt geändert von nichtsooft; 08.11.2008, 19:11.
    WHILE (!$asleep) { $sheep++; }

  • #2
    Sorry wegen Doppel-Post; Aber ich weiss ja, dass niemand Bock hat zu helfen, wenn keine Eigeninitiative da ist...

    Also hier noch ein Lösungsansatz meinerseits...:

    PHP-Code:

    function try2($id) {
    SELECT blubb FROM Gallery WHERE issub=AND subof=$id
    return array(result_countresults)
    }

    function 
    try1() {

    SELECT bla FROM Gallery WHERE issub 0;
    WHILE(
    result) {
      function 
    try2();
      if (
    result_count) {
        function 
    try2();
      }
    }


    Ich hoffe es stört sich keiner an meinem PseudoCode... ^^

    Viell. sollte man das Ganze besser als Nested Stets betrachten!?
    Zuletzt geändert von nichtsooft; 22.10.2008, 06:57.
    WHILE (!$asleep) { $sheep++; }

    Kommentar


    • #3
      Nested Set wäre eine Möglichkeit, ja.

      Bei 5 Einträgen in der DB kannst du das aber auch ggf. schnell mit PHP rechnen. Bei deutlich mehr würde ich zu Nested Set raten.

      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
      Wie man Fragen richtig stellt

      Kommentar


      • #4
        hmm... also ich hab mir das jetzt angesehn und auf grund der unflexiblen Umgebung in dem CMS an dem ich code (pear kann irgendwie nicht eingebunden werden und so...) denke ich, dass die Lösung mit Rekursion die einzig wirklich sauber durchführbare ist...

        Kann mir da jmd mit nem kurzen Pseudocode schnipsel nen Schubbs in die richtige Richtung geben (siehe Ansatz oben)!?


        Danke schon mal vorab!
        WHILE (!$asleep) { $sheep++; }

        Kommentar


        • #5
          Keine Ahnung was du gelesen hast, aber das Auslesen eines Nested-Set besteht normalerweise aus genau einem Query.
          Das sollte sich in jedem CMS bauen lassen.


          Die weitaus unperformantere Variante in irgendwas zwischen Pseudo und Fatal-Error-Code:
          PHP-Code:
          <?php
          function get_categories() {
            
          $result sql_query ("SELECT * FROM categ WHERE parent = 0");
            
          $return = array();
            while (
          $row sql_fetch_assoc) {
              
          $return[] = array($row"sub" => get_sub($row));
            }
            return 
          $return;
          }

          function 
          get_sub($parent) {
            
          $result sql_query("SELECT * FROM categ WHERE parent = $parent["id"]");
            
          $return = array();
            while (
          $row sql_fetch...)
              
          $return[] = array($row"sub" => get_sub($row));
            return 
          $return;
          }

          print_r(get_categories());

          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
          Wie man Fragen richtig stellt

          Kommentar


          • #6
            Danke ghostgambler! Das funzt so weit....

            Link: click

            Jetzt muss ich's nur noch schaffen, Ordnung rein zu bringen; Sprich das zurückgelieferte Multi-instanz-array vernünftig darzustellen und dabei jedes mal die Tiefe mitzuzählen...
            Anregungen sind nach wie vor seeeeehrrrrr willkommen!
            WHILE (!$asleep) { $sheep++; }

            Kommentar


            • #7
              Ich bekomm das zurückgelieferte Array einfach nicht aufgeschlüsselt! Das hat viel zu viele Ebenen!
              Viell. seh ich einfach den Wald vor lauter Bäumen nicht...!?

              Hat jmd noch nen kleinen Tipp!?
              WHILE (!$asleep) { $sheep++; }

              Kommentar


              • #8
                PHP-Code:
                <?php
                echo '<pre>';
                print_r(get_categories());
                echo 
                '</pre>';

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  Danke ghost! Leider löst PRE das Problem nicht!

                  Wie bekomm ich so ne Darstellung hin? Ich spiel jetzt schon ne ewigkeit mit foreach rum und bekomm nichts zu stande....
                  WHILE (!$asleep) { $sheep++; }

                  Kommentar


                  • #10
                    1. bei klick auf link kommt die meldung "Der Zutritt zu dieser Seite ist Ihnen leider verwehrt"
                    2. das geht auch mit einer rekursion mittels is_array
                    vielleicht helfen dir die ersten beiden tutorials. da geht es auch um rekursionen. das prinzip ist das selbe.

                    peter
                    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                    Meine Seite

                    Kommentar


                    • #11
                      Ehmm.. pro Unterbaum ein eigenes Query finde ich unnötig. Wozu nicht EIN Query, das alle Daten holt und die dann zu einer Baumstruktur zusammensteckt?

                      PHP-Code:
                      <?php

                      $categories 
                      = array(
                          
                      => array('id' => 1'parent_id' => 0'children' => array()),
                          
                      => array('id' => 2'parent_id' => 1'children' => array()),
                          
                      => array('id' => 3'parent_id' => 1'children' => array()),
                          
                      => array('id' => 4'parent_id' => 0'children' => array()),
                          
                      => array('id' => 5'parent_id' => 0'children' => array()),
                          
                      => array('id' => 6'parent_id' => 2'children' => array()),
                          
                      => array('id' => 7'parent_id' => 2'children' => array())
                      );

                      foreach (
                      $categories as $id => $category) {
                          
                      $categories[$category['parent_id']]['children'][$id] =& $categories[$id];
                      }

                      $categories $categories[0]['children'];

                      printf('<pre>%s</pre>'print_r($categoriestrue));

                      ?>

                      Kommentar


                      • #12
                        So! Danke für eure Antworten! Bin noch mit Peter's TUTs beschäftigt! Ist zwar ein bisschen umme Ecke Denken, weil er da mit classes arbeitet, sieht aber sehr interessant aus...

                        Was h3ll angeht, versteh ich den Denkansatz nicht so ganz! SRY!

                        Edit: Ach ja; im Anhang ein Bildchen wie das ganze bei mir im fehlerhaften Zustand (siehe 1. Post) aussieht....

                        Lg. aus Wien
                        Angehängte Dateien
                        WHILE (!$asleep) { $sheep++; }

                        Kommentar


                        • #13
                          Das andere ist ein "Wir holen alle Datensätze ohne Ordnung aus der DB und basteln alles in PHP"... macht die Sache aber weder deutlich schneller noch einfacher... genauso doof
                          Nested Set wäre hier immer noch primary point of interest~

                          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                          Wie man Fragen richtig stellt

                          Kommentar


                          • #14
                            Original geschrieben von ghostgambler
                            Das andere ist ein "Wir holen alle Datensätze ohne Ordnung aus der DB und basteln alles in PHP"... macht die Sache aber weder deutlich schneller noch einfacher... genauso doof
                            Also eine einfache Schleife durch ein Array ist immer noch deutlich schneller als für jede einzelne Row ein Subquery abzusetzen.

                            Kommentar


                            • #15
                              Original geschrieben von h3ll
                              Also eine einfache Schleife durch ein Array ist immer noch deutlich schneller als für jede einzelne Row ein Subquery abzusetzen.
                              Wenn du meinst, dass das Abrufen der Daten, Kopieren in ein Array, erneutes Durchlaufen, Anlegen von diversen Referenzen und noch mal Durchlaufen zur Ausgabe jetzt so viel deutlich schneller geht, als das additive direkt korrekte Aufbauen des gewünschten Arrays, dann magst du vielleicht recht haben.
                              So oder so ist auch deine Lösung meiner Meinung nach nicht für ein Live-System / vor allem eine Navigation / brauchbar. Das wird auch nicht dadurch besser, indem man die Rechenleistung vom DB-Server auf den Web-Server schiebt...

                              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                              Wie man Fragen richtig stellt

                              Kommentar

                              Lädt...
                              X