Как отобразить иерархические данные NESTED SET с помощью PHP?

Я пытаюсь понять, как отображать вложенные данные MySQL, используя php. Мне удалось отбросить все «листовые узлы», но потом я застрял. Мне нужно отобразить целое дерево и все его элементы. Вот таблица

category_id, name, lft, rgt 1 Saws 1 12 2 Chainsaws 2 7 3 Red 3 4 4 Yellow 5 6 5 Circular saws 8 9 6 Other saws 10 11 

Вот код:

 $query = 'SELECT node.name, node.lft, node.rgt FROM item_cats AS node, item_cats AS parent WHERE node.lft BETWEEN parent.lft AND parent.rgt AND parent.name = "' . SAWS . '" ORDER BY node.lft'; $result = mysql_query($query, $db) or die (mysql_error($db)); while ($row = mysql_fetch_assoc($result)) { if ($row['rgt'] == $row['lft']+1) { echo '==>'; } echo $row['lft']; echo $row['name']; echo $row['rgt']; echo '<br />'; echo '<br />'; } 

И это то, что я получаю:

 1Saws12 2Chainsaws7 ==>3Red4 ==>5Yellow6 ==>8Circular saws9 ==>10Other saws11 

Основываясь на ссылке, которую показал мне Стю, в этом уроке показан этот запрос для определения глубины:

 SELECT node.name, (COUNT(parent.name) - 1) AS depth FROM nested_category AS node, nested_category AS parent WHERE node.lft BETWEEN parent.lft AND parent.rgt GROUP BY node.name ORDER BY node.lft 

Итак, что-то вроде этого должно работать:

 <?PHP $query = 'SELECT node.name, (COUNT(parent.name) - 1) AS depth FROM nested_category AS node, nested_category AS parent WHERE node.lft BETWEEN parent.lft AND parent.rgt GROUP BY node.name ORDER BY node.lft'; $result = mysql_query($query, $db) or die (mysql_error($db)); while ($row = mysql_fetch_assoc($result)) { for ($i = 0; $i < $row['depth']; $i++) { echo '==>'; } echo $row['name']; echo '<br />'; echo '<br />'; } ?> 

Это должно выводить:

 Saws ==>Chainsaws ==>==>Red ==>==>Yellow ==>Circular Saws ==>Other Saws 
 <?PHP $query = ' select if( count(a.name) - 1 = 0, a.name, concat(repeat(' ', count(a.name) - 2), '+--', b.name) )name from nested_category b, nested_category a where node.lft between a.lft and a.rgt group by b.name order by b.lft'; $result = mysql_query($query, $db) or die (mysql_error($db)); while ($row = mysql_fetch_assoc($result)) echo "{$row['name']}<br>"; ?> 

Должен сделать так:

 Saws +--Chainsaws +--Red +--Yellow +--Circular Saws +--Other Saws