Проблема с древовидным меню

Леха

Guest
Проблема с древовидным меню

Всем привет!!!
В первую очередь хочу поблагодорить всех участников форума за столь ценный ресурс. Почерпнул очень много ценного и полезного.
Теперь моя трабла:
Есть таблица, в которой содержаться данные о разделах:
| id | name | position | level |
name - имя раздела
position - позиция раздела в меню
level - указатель на материнский раздел,т.е. id материнского раздела.
попытался сделать так:

$sql="SELECT * FROM menu ORDER BY position";
$result = mysql_query($sql) or die(mysql_error());
while($row =mysql_fetch_array($result)){
if($row["level"]==0){
print($row["name"]);
}else{
<li>print($row["name"]);</li>
}
}
Но выводилось все не так как надо, т.е. не древовидной структурой. Пытался по-разному, все приводить не буду, дабы не занимать Вашего времени.
Мож кто подскажет, как грамотно решить эту проблему?!!
Заранее благодарен!!!
 

Cougar

Кошак
Леха
Самый простой способ (он же самый ресурсоёмкий) - рекурсия.
 

Леха

Guest
Спасибо что откликнулись!!!
Cougar а поподробнее можно?
Romantik ага, уже читаю, спасибо!
 

Bred Vilchec

Новичок
Автор оригинала: Cougar
Леха
Самый простой способ (он же самый ресурсоёмкий) - рекурсия.
Не совсем. В структуре `id`-`parent_id`-`level` можно обойтись итерацией в самом запросе, когда таблица связывается сама с собой level раз. При этом можно получить и все идентификаторы родителей и все остальное.
Кстати, получается все довольно быстро, у меня в контроле доступа 5 юзеров и 5 объектов (оба в виде деревьев) обрабатываются столько же, сколько и сто тысяч и того, и другого. При этом кстати, происходит объединение с другими таблицами в БД.
 

Cougar

Кошак
Bred Vilchec
Согласен, что вполне можно обойтись, грубо говоря, двумя итерациями - одной при выборке, и ещё одной при формировании списка и выводе. Но так сложнее для понимания (для новичка).
имхо, естественно.
 

Bred Vilchec

Новичок
Cougar
у меня на все про все уходит два запроса на таблицу. Первый запрос по ID получает level объекта, а второй запрос level раз объединяет таблицу саму с собой. Итерация получается в самом запросе. Результат, выдающийся БД - столбец идентификаторов родителей.
 
Сверху