Darstellungsproblem

Arndtinho

Erfahrenes Mitglied
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:
$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
       |-F
Aber sollte nicht eigentlich dies dabei heraus kommen?
Code:
A
|- B
  |- C
  |- D
E
|-F
Wo liegt mein Fehler und wie kann ich den bereinigen?

Gruß,
Arndtinho
 
Die Anzahl der <ul> bzw. </ul> hängt von dem Unterschied der Levels von zwei aufeinanderfolgenden Datensätzen ab.
Sprich wenn ein Datensatz in Level 3 ist, und der nächste in Level 1, brauchst du 2 mal </ul>. Es kommt also auf die Differenz
PHP:
$row[ 'level' ] - $i
an.
 
Hallöchen!

hm ? aber du hattest dein <ul> doch geschlossen

hier.....
PHP:
if( $row[ 'level' ] < $i ) { 
			echo "</ul>";

Liebe Grüße,

Benni
 
Hi nochmal !

Es kann ja auch nur ein Fall auftreten so wie ich das sehe!
Entweder
PHP:
if( $row[ 'level' ] > $i ){
echo "<ul>";
oder
if( $row[ 'level' ] < $i ){
echo "</ul>";

und es trifft nur der erste Fall zu also das mit dem > $i und somit wird <ul> nicht geschlossen.

Liebe Grüße Benni
 
Zuletzt bearbeitet:
das nur der erste Fall eintritt, habe ich ja festgestellt. Ich versuche gearde ne Lösung zu finden, das am Ende des Baumes der zweite Fall eintritt und somit die geöffneten <ul> geschlossen werden, damit die Threads ordentlich dargestellt werden.
 
Zurück