Рекурсия при выводе меню

Lazarius

Новичок
Рекурсия при выводе меню

Привет всем.

Что то я совсем с этой рекурсией запутался...

Есть таблица, в которой разделы сайта покоются, в этой таблице есть поле "parent", если оно равно нулю, то раздел корневой, если не равно нулю значит раздел - потомок раздела ID которого равно значению parent.

Вывести всех потомков корневого раздела в меню я кое-как допёр, но вот как отрисовать меню снизу вверх, т.е. от потомка до корневого раздела.
 

_vampiro_

Новичок
http://phpclub.ru/talk/search.php?s=&action=showresults&searchid=1154708&sortby=after&sortorder=descending

что-то не искал, ИМХО.
 

Lazarius

Новичок
_vampiro_
Почитал... но извиняюсь за выражение, но НИХРЕНА не понял :(
Народ обрисуйте, пожайлуста, хоть в общих словах как это сделать.
 

chisto_tolyan

Враг народа
PHP:
function recursive($id){
  $res=mysql_query("SELECT Parent FROM menu WHERE Id=".$id);
  $row=mysql_fetch_row($res);
  echo $id."::".$row[0]."<BR>";

  $rec=mysql_query("SELECT Id FROM menu WHERE Id=".$row[0]);
  if(mysql_num_rows($rec)>0){
    recursive(mysql_result($rec,0,0);
  }
}
 

SelenIT

IT-лунатик :)
Безотносительно к типу БД, запрос SELECT Id FROM menu WHERE Id=... умиляет :)
 

_vampiro_

Новичок
SelenIT
ну, это типа проверка наличия родителя, как я понял. (По условию задачи там достаточно
PHP:
if ($ID==0)
.
 

SelenIT

IT-лунатик :)
По-моему, одного запроса хватит и для проверки существования, и для выборки предка...
PHP:
function recursive($id){
  $res=mysql_query("SELECT Parent FROM menu WHERE Id=".$id);
  if ($row=mysql_fetch_row($res)) {
     echo $id."::".$row[0]."<BR>";
     recursive($row[0]);
  }
}
 

Lazarius

Новичок
Спасибо всем.
Сделал так:
когда выбирается один из потомков, неважно какой, открывается вся ветвь - от корневого родителя до последнего потомка.

Функция возвращающая корневого родителя
PHP:
function Get_Parent($db, $parent)
{
do {
    	$query = "SELECT id, parent FROM structure WHERE id='$parent'";
        $result = mysql_query($query, $db);
                  $fetch = mysql_fetch_array($result);
                           $parent = $fetch[parent];
                           $retval = $fetch[id];
   } while ($parent != 0);
return $retval;
}
 

_vampiro_

Новичок
PHP:
$parent = $fetch[parent]; 
$retval = $fetch[id];
кавычки.
$db - вобще не нужна.
и где тут рекурсия? :)
 
Сверху