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>';
?>