Till: So ist es :D

Beitrag lesen

Hallo Christian!

Meine Momentane Lösung erscheint mir so unprofessionell und blöd :D
Deswegen suche ich eine Software welche dies schon "perfekt" gelöst hat.

<?php

mysql_connect('localhost', 'root');
 mysql_select_db('forum');

$query = "SELECT n.*, round((n.rgt-n.lft-1)/2,0) AS childs, count(*)+(n.lft>1) AS level, ((min(p.rgt)-n.rgt-(n.lft>1))/2) > 0 AS lower, (((n.lft-max(p.lft)>1))) AS upper FROM forum n, forum p WHERE n.lft BETWEEN p.lft AND p.rgt AND (p.parent = n.parent) AND (p.id != n.id OR n.lft = 1) GROUP BY n.parent, n.id ORDER BY n.parent, n.lft";
 $result = mysql_query($query);

while ($row = mysql_fetch_assoc($result)) {
  $tree[] = $row;
 }

echo '<ul>';

foreach($tree as $id => $values) {

echo '<li>'.$values['topic'];

if ($values["level"] == 1)
   $parent = array();

if ($values["level"] >= $last["level"])
   $parent[$last["level"]] = $last;

if ($values['childs'] > 0) {
   echo '<ul>';
  } elseif ($values['lower'] == 0) {
   echo '</li></ul>';
   for ($i=2;$i<$values["level"];$i++) {
    if ($parent[$i]["lower"] == 0) {
     echo '</ul></li>';
    } else {
     echo '</li>';
    }
   }
  } else {
   echo '</li>';
  }

if ($values['level'] == 2 && $values["lower"] == 0) {
   echo '</li>';
  }

$last = $values;

}

echo '</ul>';

?>