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

Мутник

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

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

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

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

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

т.е.
Одежда->верхняя->зимняя->штаны->ватные->зеленые и так далее. Нужна (скорее всего) рекурсионная реализация.
 

bool

Новичок
используй поиск и фак, про это уже много раз говорилось
 

Мутник

Новичок
мдя... про них совсем забыл ;( сорри

-~{}~ 16.10.04 16:59:

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

кто то может помочь?
 

advocat

developer
валом решений, начиная от того, что дерево сганяешь в массив и с дальше с ним работаешь или несколькими запросами ...
 

Мутник

Новичок
Несколько запросов - жутко медленно - не подходит..

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

Заранее благодарен.
 

advocat

developer
писалось руцями для примера
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:

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

advocat

developer
Мутник
что значит не работает ? только что проверил на простом примере

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);
?>
как ты думаешь, что получилось на выходе ?
 

Мутник

Новичок
все, спасибо!

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