NestedSets PHP-Ausgabe

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

  • NestedSets PHP-Ausgabe

    Benötige Hilfe (PHP-Ausgabe) einer NestedSet-Baumstruktur !

    Folgende Baumstruktur möchte ich mit PHP wie folgt ausgeben.

    |ID | RootID | Name | L | R |
    +---+--------+----------+---+---+
    | 1 | 1 | Baum1 | 1 | 6 |
    | 2 | 2 | Baum2 | 1 | 4 |
    | 3 | 1 | punkt1 | 2 | 3 |
    | 4 | 1 | punkt2 | 4 | 5 |
    | 5 | 2 | punkt1 | 2 | 3 |

    Baum1[Wurzel1]
    <ul>
    <li>punkt1</li>
    <li>punkt2</li>
    </ul>

    Baum2[Wurzel2]
    <ul>
    <li>punkt1</li>
    </ul>

    Die MySQL-Select-Abfrage ist wie folgt:
    ---------------------------------------

    "SELECT node1.Name, COUNT(*) AS Level
    FROM node AS node1, node AS node2
    WHERE node1.RootID = node2.RootID
    AND node1.L BETWEEN node2.L AND node2.R
    GROUP BY node1.L, node1.RootID
    ORDER BY node1.RootID, node1.L, node1.R";

    Wäre schön, wenn jemand den Quellcode dazu posten könnte. Ich bekomme das mit der Liste <ul>.. für jeden Baum einfach nicht hin.

    Danke schön.

  • #2
    NestedSets Baumstruktur PHP-Ausgabe

    Benötige Hilfe (PHP-Ausgabe) einer NestedSet-Baumstruktur !

    Folgende Baumstruktur möchte ich mit PHP wie folgt ausgeben.

    |ID | RootID | Name | L | R |
    +---+--------+----------+---+---+
    | 1 | 1 | Baum1 | 1 | 6 |
    | 2 | 2 | Baum2 | 1 | 4 |
    | 3 | 1 | punkt1 | 2 | 3 |
    | 4 | 1 | punkt2 | 4 | 5 |
    | 5 | 2 | punkt1 | 2 | 3 |

    Baum1[Wurzel1]
    <ul>
    <li>punkt1</li>
    <li>punkt2</li>
    </ul>

    Baum2[Wurzel2]
    <ul>
    <li>punkt1</li>
    </ul>

    Die MySQL-Select-Abfrage ist wie folgt:
    ---------------------------------------

    "SELECT node1.Name, COUNT(*) AS Level
    FROM node AS node1, node AS node2
    WHERE node1.RootID = node2.RootID
    AND node1.L BETWEEN node2.L AND node2.R
    GROUP BY node1.L, node1.RootID
    ORDER BY node1.RootID, node1.L, node1.R";

    Wäre schön, wenn jemand den Quellcode dazu posten könnte. Ich bekomme das mit der Liste <ul>.. für jeden Baum einfach nicht hin.

    Danke schön.

    Kommentar


    • #3
      Bitte keine Crosspostings!!! *verwarn*

      Kommentar


      • #4
        Kleiner ansatz: Überleg dir mal, was für eigenschaften die beiden Knoten (baum 1+2) haben.

        Kommentar


        • #5
          Hmm würde mich aber auch interessieren.
          Ich hab mir schon ein paar sachen zu NestedSets durch gelesen, nur verstehen tu ich es nicht so ganz.

          besonders das Rechts(R) und Links (L) leuchtet mir einfach nicht ein. Ich hab mir zwar folgendes Tut schon durch gelesen, aber ich schnall es einfach nicht

          http://www.php-resource.de/tutorials/read/21/1/

          mein Hauptproblem besteht darin, wenn ich jetzt z.B. Verzeichnisse rekrusiv einlese, wie bekomm ich die dann anständig in die Datenbank?

          Und dann auch wieder vernünftig raus?

          Oder ist dafür ein id <-> parentid set besser?
          Zuletzt geändert von JamieWolf; 27.08.2004, 12:25.
          Nicht jeder der viele Posts hat weiß auch viel

          Kommentar


          • #6
            besonders das Rechts(R) und Links (L) leuchtet mir einfach nicht ein. Ich hab mir zwar folgendes Tut schon durch gelesen, aber ich schnall es einfach nicht
            Und anhand der skizze erkennst du nicht das rechts-links system?

            Oder ist dafür ein id <-> parentid set besser?
            beide systeme haben ihre vor und nachteile. für dich zum einstieg (besonders in verbindung mit der verzeichnisstruktur ist wahrscheinlich parent_id einfacher.

            Das ganze lässt sich später wenn du weißt, worums geht ohne probleme auf das nested-sets umschreiben,

            Kommentar


            • #7
              Danke Tobi,

              irgendwie verstehe ich es ja auch, aber leider nur Ansatzweise.
              Die grafik verstehe ich schon irgendwo, mal in meiner Sprache:

              Ich fange mit dem Rootbaum an, klar.
              Dann kommt sozusagen als nächstes beim auslesen dann die Reihe in der DB die ne 2 hat, dann 3 usw.

              Ich denke mal das schnall ich schon, nur meine frage bezog sich mehr darauf, wie ich sowas in eine Datenbank bekomme, wenn ich per PHP die Verzeichnisse einlese. Wie weiß dass script dann welcher Folder zur zu welchen übergeordneten gehört?

              Und warum wird immer erst von links nach links gegangen und wenn Links nicht mehr höheres kommt nach Rechts? (Siehe D)
              Und dann wieder nach Links (siehe B->F)

              Ich glaube jeh mehr Text ich schreibe umso klarer wird es, aber halt bis jetzt immer noch nicht klick
              Und dann auch noch wieder von F -> A ...

              <-- Mein Hirn setzt gerade aus, konnte gestern Nacht deswegen schon nicht schlafen ... Besonders weil es einfach ne Noobfrage ist, aber ich steh einfach total auf dem schlauch, da kommt kein tropfen wasser an die Stelle wo es hin soll
              Nicht jeder der viele Posts hat weiß auch viel

              Kommentar


              • #8
                Ich denke mal das schnall ich schon, nur meine frage bezog sich mehr darauf, wie ich sowas in eine Datenbank bekomme, wenn ich per PHP die Verzeichnisse einlese. Wie weiß dass script dann welcher Folder zur zu welchen übergeordneten gehört?
                Auch hier der gleiche tipp wie für dudu. versuch dir mal im kopf klar zu machen, woran DU erkennst, dass der ordner zu einem anderen gehört. wo siehst du die zusammenhänge. mach dir daras regeln und setzt diese in PHP um. Nestedsets ist dafür ideal, wenn auch für einsteiger nicht ganz easy. erfordert logisches denken.

                Und warum wird immer erst von links nach links gegangen und wenn Links nicht mehr höheres kommt nach Rechts? (Siehe D)
                weil es die reihenfolge vorgibt. zu zählst ja auch nich 12654387 sondern 12345678 und genauso ist es bei nsets auch.

                Ich glaube jeh mehr Text ich schreibe umso klarer wird es, aber halt bis jetzt immer noch nicht klick
                Genau das ist das. geh das ganze mehrfach im kopf durch, dann siehst du die zusammenhänge-

                Und dann auch noch wieder von F -> A ...
                Wie gesagt, die reihenfolge 12345678

                Kommentar


                • #9
                  PHP problem...

                  Hallo,

                  kann immer nur eine Kategorie mit den entsprechenden Unterpunkten mit PHP ausgeben.

                  Schaffe es einfach nicht, alle Kategorien(Bäume) mit deren Unterkategorien auszugeben.

                  Kategorie_1
                  <ul>
                  <li>punkt_1</li>
                  <li>punkt_2</li>
                  </ul>


                  Kategorie_2
                  <ul>
                  <li>punkt1</li>
                  </ul>

                  das ist zum verrückt werden

                  Kommentar


                  • #10
                    ähm das hast du ja bereits in deinem Crossposting erwähnt. was sind deine ansätze?

                    Kommentar


                    • #11
                      code

                      PHP-Code:
                      <?php

                      include("db_connect.inc.php");

                      $sql "SELECT node1.Name, COUNT(*)-1 AS Level
                              FROM node node1, node node2
                              WHERE node1.RootID = node2.RootID
                              AND node1.L BETWEEN node2.L AND node2.R
                              GROUP BY node1.L, node1.RootID
                              ORDER BY node1.RootID, node1.L, node1.R"
                      ;

                      $result mysql_query($sql);
                      $level 0;

                      for(
                      $count 0$row mysql_fetch_row($result); $count++) {

                      if (
                      $row[1] == 0) {

                      echo 
                      "$row[0]";

                      } else {

                      if(
                      $row[1]>$level ) {

                      echo 
                      "<ul>\n";

                      $level $row[1]; }

                      if(
                      $row[1] < $level ) {

                      $i 1;

                      while(
                      $i <= $level-$row[1] ) {                       

                      echo 
                      "</ul>\n";
                      $i++; }        

                      $level $row[1];
                      ?>
                      EDIT:
                      php-Tags sponsored by asp2php. Das nächste Mal machst du selbst
                      Zuletzt geändert von asp2php; 27.08.2004, 22:20.

                      Kommentar


                      • #12
                        php-code bitte in [PHP]-Tags packen.

                        Kommentar


                        • #13
                          Tipp: entweder schaust du dir das Ergebnis deiner Abfrage in PMA an, oder alle Zeilen auslesen, in Array speichern und per print_r ausgeben. Dann kannst du überlegen, wie du die Daten HTML-mässig ausgeben kannst. Notfalls: Abfrage umstrukturieren, dass die Daten 'ausgabe freundlich' raus kommen.

                          Kommentar

                          Lädt...
                          X