Ankündigung

Einklappen
Keine Ankündigung bisher.

Verschachtelte Datenbankabfrage - wie fange ich an?

Einklappen

Neue Werbung 2019

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

  • Verschachtelte Datenbankabfrage - wie fange ich an?

    Hallo habe ein Problem (Weiß noch nicht mal genauwie ich es erklären soll).

    Stellt Euch folgende Datenbank (id-Feld weggelassen), vor:

    Tabelle: Daten

    ebene | name | elternebene
    ====================
    40 | Gerd | NULL
    40 | Maria | NULL
    50 | Franz | Gerd
    50 | Johann | Gerd
    60 | Gabi | Franz
    60 | Anna | Johann
    ...
    ...

    Im entferntesten ist es eine Art Stammbaum. Gerd wäre z.B. Vorfahr von Franz und Johann, Gabi wäre ein Kind von Franz.
    Es ist in meiner Tabelle nicht möglich, dass Ein Kind aus Ebene 60 ein Elternteil aus Ebene 40 (also zwei Ebenen höher) hat.

    Ich möchte dies nun hirarchisch darstellen, also oben den "Stammeshöchsten" Hier einen aus Ebene 40, unter diesem direkt seine Nachkommen. Unter jedem Nachkommen den nächsten usw.

    Es sollte also irgendwie so aussehen:

    -> Gerd
    -> Franz
    -> Gabi
    -> Johann
    -> Anna
    -> Maria

    Gelingt mir das mit einer Select * from Daten - Abfrage und geschickter Sortierung des Ergebnisareys oder muss ich lauter ineinander verschachtelte Abfragen machen?

    Ich stehe hier echt auf dem Schlauch und wäre für einen Ansatz sehr dankbar...


  • #2
    Mist... jetzt ist die Einrückung weggefallen.... Also das Ergebnis soll so aussehen:

    -> Gerd
    ---> Franz
    -----> Gabi
    ---> Johann
    -----> Anna
    -> Maria

    Ist das so verständlich?

    Kommentar


    • #3
      Hilft dir das?
      http://www.php-homepage.de/artikel/artikel13.html
      (siehe "Stammbaum")

      Gefunden über Google: stammbaum php

      Kommentar


      • #4
        Code:
        function get_tree($who,$ebene) {
         $res=mysql_query ("select * from stammbaum where nachfahre_von=$who;");
          while ($verwandter=mysql_fetch_array($res)) {
            echo $ebene.$verwandter[name]."
        ";
            get_tree($verwandter[id],$ebene."");
          } 
        }
        Mir ist das mit dem $ebene nicht klar. Das ist doch immer "" (leer) oder wo ist der Haken. Wo kommt die Einrückung in der zweiten Stufe her?

        Oder anders gesagt... was macht die Zeile
        Code:
        ....$ebene."");

        Kommentar


        • #5
          Die rückt ein.
          Statt $ebene."" hätte der Autor auch ++$ebene verwenden können. Er gibt wohl die "Tiefe" an. Allerings wäre die Ausgabe dann

          Code:
          1 Vater
          2 Sohn
          3 Enkelsohn
          3 Enkeltochter
          2 Tochter
          Da ist das Einrücken mit Leerzeichen doch übersichtlicher:
          Code:
          Vater
            Sohn
              Enkelsohn
              Enkeltochter
            Tochter
          Das kannst du aber nach Belieben anpassen.

          Kommentar


          • #6
            Letztendlich würde ich für jede Ebene eine Liste nehmen und die Einrückung mit Stylesheets vornehmen.

            Kommentar


            • #7
              Klar, Inhalt und Design sollten getrennt werden, auch schon durch die PHP Funktion. War ja nur ein kopiertes Beispiel aus Google (!). Wer sucht der findet...

              Kommentar


              • #8
                Zitat von Zergling
                Klar, Inhalt und Design sollten getrennt werden, auch schon durch die PHP Funktion. War ja nur ein kopiertes Beispiel aus Google (!). Wer sucht der findet...
                Schon klar. Wollte nur darauf hingewiesen haben.

                Kommentar


                • #9
                  Hi... danke schonmal...
                  ich werde es mal probieren und mich melden wies geklappt hat. Bin nun leider gerade an einer anderen Baustelle...

                  Kommentar


                  • #10
                    Statt $ebene."" hätte der Autor auch ++$ebene verwenden können. Er gibt wohl die "Tiefe" an. Allerings wäre die Ausgabe dann

                    Code:
                    1 Vater
                    2 Sohn
                    3 Enkelsohn
                    3 Enkeltochter
                    2 Tochter
                    Wie kann ich denn nun am einfachsten aufaddieren wie viele Ergebnisse ich in 1. Ebene, 2. Ebene, usw. erhalten habe (Im obigen Beispiel sollte dann stehen 1.Ebene=1; 2.Ebene=2, 3.Ebene=2)
                    Sollte ich hierzu für jede Ebene einen Zähler machen und mit der If-Anweisung den jeweiligen Zähler um 1 erhöhen oder gibts da was einfacheres?

                    Die Idee mit den Stylesheets werde ich auch gleich mal probieren. Dann kann ich das vielleicht schön "tabellarisch" darstellen.
                    Danke für die Hinweise....

                    Kommentar

                    Lädt...
                    X