Darstellungsproblem 'Nested Sets'

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Darstellungsproblem 'Nested Sets'

    Hallo,

    ich habe es nun endlich geschafft SqlBäume mit Nested Sets zu erstellen. Doch jetzt scheitert es an der Darstellung mehrer Rootpostings.
    Hier ist die DB-Struktur:
    Code:
    +---------+---------+---------+------+-----+
    | node_id | root_id | payload | lft  | rgt |
    +---------+---------+---------+------+-----+
    |       1 |   1     |    A    |  1   |   6 |
    |       2 |   1     |    B    |  2   |   5 |
    |       3 |   1     |    C    |  3   |   4 |
    |       4 |   2     |    D    |  1   |   4 |
    |       5 |   2     |    E    |  2   |   3 |
    +---------+---------+---------+------+-----+
    Die Funktion, welche die Threads darstellen soll, sieht so aus:
    PHP Code:
    $roots selRoots();

       foreach( 
    $roots as $root_id ) {

          
    $sql  "SELECT node1.payload, COUNT(*) AS level, node1.node_id AS id ";
          
    $sql .= "FROM node AS node1, node AS node2 ";
          
    $sql .= "WHERE node1.root_id = ".$root_id." AND node2.root_id = ".$root_id." AND node1.lft BETWEEN node2.lft AND node2.rgt ";
          
    $sql .= "GROUP BY node1.lft";

          
    $res mysql_query$sql );
          
    $i 0;

          
    // Anzeige der Threads
          ///////////////////////
          
    while( $row mysql_fetch_array$res ) ) {
             if( 
    $row'level' ] > $i ) {
                echo 
    "<ul>";
             }

             echo 
    "<li><a href=\"test2.php?id=".$row'id' ]."\">".$row'payload' ]."</a></li>";

             if( 
    $row'level' ] < $i ) {
                echo 
    "</ul>";
             }

             
    $i $row'level' ];
          }
       } 
    Als Ergebnis erhalte ich dies:
    Code:
    A
    |- B
      |- C
          |- D
              |-E
    Aber sollte nicht eigentlich dies dabei heraus kommen?
    Code:
    A
    |- B
    |  |- C
    D
    |-E
    Wo liegt mein Fehler und wie kann ich den bereinigen?

    Gruß,
    Arndtinho
    Last edited by Arndtinho; 17-11-2004, 17:53.

  • #2
    gib mal die levels mit aus.

    Liegt ganz offensichtlich daran.

    Comment


    • #3
      Habe mir die Levels, wie Du gesagt hast, ausgeben lassen.
      Die sind (nach meiner Theorie) richtig:

      A und D -> Level: 1
      B und E -> Level: 2
      C -> Level: 3

      Gruß,
      Arndtinho
      Last edited by Arndtinho; 17-11-2004, 17:54.

      Comment


      • #4
        Poste mal die ausgabe und zwar von allen oben genannten knoten.

        A und D -> Level: 1
        B und D -> Level: 2
        C -> Level: 3
        Das das hier schwachsinn ist, fällt dir selber auf?

        Comment


        • #5
          Habs gerade geändert, sorry. war ein Schreibfehler.

          Comment


          • #6
            guck dir mal den HTML-Quelltext an.

            Comment


            • #7
              Komischerweise funktioniert dies:

              PHP Code:
              for ($i 0$i <= $row'level' ]; $i++) {
                 echo 
              "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
              }
              echo 
              $row'payload' ]."<br>"
              So erhalte ich das gewünschte Ergebnis. Das verwirrt mich.

              Gruß,
              Arndtinho

              Comment


              • #8
                mich nicht! Guck dir mal die auffäligkeiten im HTML-Quelltext an. Bzw. geh deinen ersten code mal im Kopf durch.

                Comment


                • #9
                  Mhh..ok.
                  Wenn ich nciht weiterkomme melde ich mcih ncohmal.

                  Gruß,
                  Arndtinho

                  Comment


                  • #10
                    Hallo,

                    habe mir die Sache in Ruhe nochmal angeschaut und festgestellt, das die offenen <ul> nicht geschlossen werden.
                    Dann habe ich mir mal die Levels und die dazugehörigen $i ausgegeben. Dies wiederum führte dazu, dass die Bedingung
                    PHP Code:
                    if( $row'level' ] < $i 
                    nie erfüllt wird. Also brauche ich eine Differenz, oder?

                    Gruß,
                    Arndtinho

                    Comment


                    • #11
                      vielleicht meinst du mit der differenz schon das richtige. dann frage ich mich allerdings, warum du noch hier fragst.

                      wenn ich jetzt grade richtig liege, sollte es reichen, wenn das neue level kleiner ist, als das vorherige, die differenz (X) zu nemen, und dann X mal den </ul> tag machen.

                      Comment


                      • #12
                        So ungefähr dachte ich mir das auch.
                        PHP Code:
                        $row['level'] - $i 
                        Aber bis jetzt habe ich es nicht geschaft dies umzusetzen.

                        Comment


                        • #13
                          str_repeat

                          Comment


                          • #14
                            ich bin einfach zu b..d.

                            Comment


                            • #15
                              Tut mir leid, bin kein Doktor.

                              Comment

                              Working...
                              X