генерация дерева многоуровневого

Мутник

Новичок
генерация дерева многоуровневого

в базе имеется такой структуры дерево.

id pid name
1 0 root
2 1 Имена
3 2 Костя
4 2 Игорь
5 2 Алена
6 1 Фамилии
7 6 Лопухов
8 6 Иванов
9 2 Дмитрий

как такое вытащить в таком порядке, чтобы юзеру вывести в правильном порядке логическом? если кто то может предложить какую то другую реализацию - буду рад.

P.S. дерево может иметь неограниченное количество "колен".

т.е.
Одежда->верхняя->зимняя->штаны->ватные->зеленые и так далее. Нужна (скорее всего) рекурсионная реализация.
 
используй поиск и фак, про это уже много раз говорилось
 
мдя... про них совсем забыл ;( сорри

-~{}~ 16.10.04 16:59:

почитал разные ресурсы - там слишком сложно и емко - мне не надо таких наворотов. Я хочу, чтобы у меня было ВСЕГО три поля - Id, paren id, name. И в функции просто рассортировать.

кто то может помочь?
 
валом решений, начиная от того, что дерево сганяешь в массив и с дальше с ним работаешь или несколькими запросами ...
 
Несколько запросов - жутко медленно - не подходит..

если решений валом - немного поделиться можете?
Именно при работе с массивом.

Заранее благодарен.
 
писалось руцями для примера
PHP:
$cat_array = array();
$res = mysql_query("SELECT `id`,`parent_id`,`name` FROM `tbl_name` ORDER BY `parent_id`");
while ($row = mysql_fetch_assoc($res)) {
    $cat_array[$row['id']] = $row;
}

function print_path ($cat_array, $tmp_array, $id) {
    if ($id == 0) {
        $a = array_reverse($tmp_array);
        $cnt = sizeof($a);
        $i = 0;
        foreach ($a as $v) {
            $i++;
            if ($i < $cnt) print '<a href=catalog.php?id='.$v['parent_id'].'>'.$v['name'].'</a> | ';
            else print $v['name'];
        }
    }
    foreach ($cat_array as $v) {
        if ($v['id'] == $id) {
            $tmp_array[] = $v;
            print_path($cat_array, $tmp_array, $v['parent_id']);
            break;
        } 
    }
}

print_path($cat_array, array(), $_GET['id']);
 
хм :confused:

буду смотреть и разбираться. Пока что не работает. Но все равно спасибо за совет - попытаюсь что то отсюда вытянуть для себя.
 
Мутник
что значит не работает ? только что проверил на простом примере

PHP:
<?php
$cat_array = array(
array('id'=>1,'parent_id'=>0,'name'=>'parent'),
array('id'=>2,'parent_id'=>1,'name'=>'level 1'),
array('id'=>3,'parent_id'=>2,'name'=>'select')
);

function print_path ($cat_array, $tmp_array, $id) {
    if ($id == 0) {
        $a = array_reverse($tmp_array);
        $cnt = sizeof($a);
        $i = 0;
        foreach ($a as $v) {
            $i++;
            if ($i < $cnt) print '<a href=catalog.php?id='.$v['parent_id'].'>'.$v['name'].'</a> | ';
            else print $v['name'];
        }
    }
    foreach ($cat_array as $v) {
        if ($v['id'] == $id) {
            $tmp_array[] = $v;
            print_path($cat_array, $tmp_array, $v['parent_id']);
            break;
        }
    }
} 

print_path($cat_array, array(), 3);
?>

как ты думаешь, что получилось на выходе ?
 
все, спасибо!

я сделал немного по другому. Благодарен за помощь! удачи!
 
Сверху