Помогите please, скрипт для постороения правильного дерева

L-ZiX

Guest
Помогите please, скрипт для постороения правильного дерева

Всем привет.
Прошу помочь мне решить одну задачку.
Есть таблица со столбцами `id` `up_id` `name` `level`.
`id` - идентификационный номер раздела
`up_id` - идентификационный номер того раздела, под которым находится текущий
`name` - имя раздела
`level` - уровень глубины раздела (самый верхний - 1)
На основе примерно такой таблици строится дерево.
Условие: данное дерево может быть до 100 разделов в глубину.
Надо сделать скрипт, который бы отображал выподающий список, но полностью отсортированный как надо. т.е.:
Раздел 1
- Раздел 1.1
- - Раздел 1.1.1
- - Раздел 1.1.2
- Раздел 1.2
- - Раздел 1.2.1
- Раздел 1.3
Раздел 2
и т.д.
-=-=-=-=-=-
Помогите мне, подскажите как сделать такой скрипт ???
или может-быть надо доработать для удобства таблицу в базе данных ???
 

L-ZiX

Guest
Статью прочитал.
Как мне сделать чтобы вывести на экран всё дерево, от 1го уровня и до последнего, а не лишь родительскую ветку и дочернюю???
 

Cid

...двинутый новичок
Рекурсия это называется.

Из функции построения дерева при обработке каждой ветки вызываешь опять эту же функцию и передаешь ей в качестве parent параметр id текущей ветки.
 

L-ZiX

Guest
Дык, это я понимаю. Ну а как потом вернуться назад и продолжить отображение других веток после того как в текущей дочерние закончились ???
Не буду же я 1000 цыклов писать (так, к слову)...
Не судите строго. Я ещё джуниор в этом всём...
 

Cid

...двинутый новичок
PHP:
$conn = mysql_connect(...);
$tree = '';
makeTree($conn,&$tree);
print $tree;

function makeTree($conn,&$tree,$parent = 0, $level = 0)
{
  $res = mysql_query("select id,name from MYTABLE where up_id = $parent",$conn);

  if($res !== false && mysql_num_rows($res) > 0)
  {
    while($ob=mysql_fetch_assoc($res))
    {
      $tree.='<nobr>'.str_repeat('&nbsp;&nbsp;',$level).$ob['name'].'</nobr><br>'; // текущая
      makeTree($conn,$tree,$ob['id'],($level+1)); // все дочерние
    }

    mysql_free_result($res);
  }

}
 

L-ZiX

Guest
Не могу догнать, куда ввести имя базы данных?
$conn = mysql_connect("localhost","root","");
 

L-ZiX

Guest
Догнал уже.....
Спасибо `Cid`у за помощь, просто огромное...
Код отлично работает...
Сижу изучаю и модифицирую под конкретные задачи...
-=-=-=-=-=-=-=-

-~{}~ 30.08.04 13:50:

Вот такая фигня выходит после выполнения данной функции 2 раз в одном скрипте:
Fatal error: Cannot redeclare maketree()
-=-=-=-=-
Чё делать?
Функция выполняется. Но после её выполнения остальная часть скрипта уже не выполняется. Помогите please !!!
 

Dallas

Guest
Судя по тексту ошибки ты дважды декларируешь ф-цию.

-~{}~ 30.08.04 16:39:

То бишь ты дважды создаешь ф-цию:
function makeTree(...
 

L-ZiX

Guest
Так... значит 2 раза функцию создавать нельзя?
 

Dallas

Guest
L-ZiX, так ведь на то она и функция, чтобы создал ее раз, а вызываешь столько, сколько надо.

Нельзя создавать ф-ции с одинаковыми именами, с разными - сколько угодно.
 

L-ZiX

Guest
Dallas спасибо.... щас исправлю код

-~{}~ 30.08.04 20:21:

Dallas какая функция проверяет, создана ли функция ???
 
Сверху