heike: probleme mit rekursion

Hallo ihr lieben.

ich habe ein problem das ich wohl mit rekursion loesen muss. nur ich denke jetzt schon seit vier stunden im kreis und will nun hier mal um hilfe fragen.

grob gesagt habe ich eine db-tabelle, in der meine navigation liegt:
id, parent_id, name
jetzt wollte ich eine funktion schreiben, die mir mit eingabe der "start-id" und der maximalen verschachtelungstiefe alle damit verknuepften eintraege liefert.

ausgabebeispiel.

haus
haus > fenster
haus > fenster > klein
haus > tueren
haus > tueren > rund
haus > tueren > eckig

also ich bild mir ein, dass das rekursiv geht.
versteht jemand, was ich gerade nicht verstehe?!?

  1. Hallo Heike,

    hast Du schon das Archiv durchsucht? Vielleicht findest Du dort ein paar Denkanstöße und Lösungswege: http://suche.de.selfhtml.org/cgi-bin/such.pl?suchausdruck=datenbank+rekursion+parent&lang=on&feld=alle&index_5=on&index_6=on&index_7=on&index_8=on&index_9=on&index_10=on&index_11=on&hits=100

    MfG
    Danny

    1. 你好 Danny,

      [...] http://suche.de.selfhtml.org/cgi-bin/such.pl?suchausdruck=datenbank+rekursion+parent&lang=on&feld=alle&index_5=on&index_6=on&index_7=on&index_8=on&index_9=on&index_10=on&index_11=on&hits=100

      Solche Links sind kontraproduktiv. Man findet im Archiv nur noch Links auf
      die Suche oder »Such im Archiv«-Hinweise...

      再见,
       CK

      --
      To define recursion, we must first define recursion.
      http://wwwtech.de/
  2. Hello,

    haus
    haus > fenster
    haus > fenster > klein
    haus > tueren
    haus > tueren > rund
    haus > tueren > eckig

    also ich bild mir ein, dass das rekursiv geht.
    versteht jemand, was ich gerade nicht verstehe?!?

    function get_path2root($id)
    {
      $tree = array();

    # Datensataz zur ID holen

    $_tree[] = $_rec;

    if(!is_null($_rec['parent']))
      {
        $_tree[] = get_path2root($parent);
      }

    return $_tree;
    }

    So kannst Du auf jeden Fall von einer beliebigen Stelle im Baum den Weg zur Root zurück finden.

    Das ist aber dann nur ein Ast.
    Ich würde in der Navigation sowieso immer nur maximal drei Ebenen anzeigen

    haus
       fenster     <-- aktuell ausgewähltes Element (hier Knoten) des Baumes
         klein       <--+
         groß        <--+- Blätter der aktuellen Ebene, ob es in Wirklichkeit auch Knoten sind,
         Sprossen    <--+  wird erst angezeigt, wenn man sie öffnet, also in die aktuelle
       tueren              Ebe vorrückt.
       treppen
       heizungen
       ^
       |
       |
       aktuell aktive Ebene

    Wenn ich jetz auf fenster/klein klicke, würde sich die Darstellung folgendermaßen verändern:

    fenster
       klein
         Ganzglasscheibe
         mit Sprosse in Aspik
         mit aufgesezter Sprosse
         mit glasteilender Sprosse
       groß
       Sprossen
     tueren
     treppen
     heizungen

    usw.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Danke, Tom.

      Ich schau mir doch gleich mal Deine Funktion an, in der übrigens ein kleiner Schreibfehler steckt: $tree und $_tree...

      function get_path2root($id) {
        $tree = array();
        # Datensataz zur ID holen
        $_tree[] = $_rec;
        if(!is_null($_rec['parent'])) {
          $_tree[] = get_path2root($parent);
        }
        return $_tree;
      }

      So kannst Du auf jeden Fall von einer beliebigen Stelle im Baum den Weg zur Root zurück finden.

      Eigentlich wollte ich ja nicht von einer beliebigen Stelle im Baum den Weg _zurück_ finden, sondern eine beliebige Stelle im Baum als Root definieren und von dort aus die untergeordneten Äste/Blätter finden...

      Das ist aber dann nur ein Ast.
      Ich würde in der Navigation sowieso immer nur maximal drei Ebenen anzeigen

      ...auch wenn das dann auf drei Ebenen beschränkt ist. Für eine Navigation macht das Sinn, stimmt. Nur wenn ich die Funktion später auch in der Sitemap einsetzen möchte, dann wäre es doch praktisch auf alle Äste/Blätter zuzugreifen, oder?

      Liebe Grüße aus Mainz