Обход "дерева". Алгоритм выборки родителей.

Romantik

TeaM PHPClub
Обход "дерева". Алгоритм выборки родителей.

Приветствую.
Есть следующая древовидная таблица-структура прайса:
items
Код:
[B]id  parent_id    name	                type[/B]
1       0        Принтеры		0
2       0        Копиры			0
3       1        Струйные		0
4       1        Лазерные		0
5       3        EPSON			0
6       3        CANON			0
7       5        Принтер EPSON C42	1
8       5        Принтер EPSON C20	1
9       6        Принтер CANON i 250	1
10      6        Принтер CANON i 350	1
Где type=1, значит, что это устройство и к нему есть картриджи
wares
id items_id name
Задача выводить прайс картриджей (wares)
Я сделал панель типа Все устройства ->Принтеры->EPSON->Принтер EPSON C42
И внизу его картриджи в виде прайса.
Необходимо сделать алгоритм возможности выбирать прайс на:
-ВСЕ "EPSON"
-ВСЕ "Принтеры"
-на ВСЕ
Я бы хотел Вашей помощи в унивиерсальном алгоритме выборки. Если кто сталкивался, подскажите
Легко когда на ВСЕ "EPSON":
Код:
 SELECT * FROM items WHERE parent_id=3
 while()
 {
 $id= $row["id"];
  SELECT wares.name FROM wares,items WHERE wares.items_id=items.id AND items.parent_id=$id
  while()
  {
  ...Вывод прайса
  }
 }
А вот вывод на ВСЕ "Принтеры" требует еще одного цикла, и т.п.
Наверняка есть более удобный алгоритм.

Заранее благодарен за любую помощь и замечания.
 

valyala

Новичок
Вот тут http://phpclub.ru/talk/showthread.php?postid=290330#post290330 есть алгоритм построения дерева. Если тебе нужно не все дерево, а одна из его ветвей, то вместо
PHP:
$root = & $nodes[$root_id];
пишешь
PHP:
$root = & $nodes['идентификатор_нужной_ветви'];
Недостаток этого алгоритма - для построения даже самой маленькой ветви необходимо собрать все дерево. Поэтому его целесообразно использовать, если количесвто записей в таблице невелико (не более 10000), или производительность программы не критична.
 

Romantik

TeaM PHPClub
решил вопрос функцией с рекурсией...
немного неудобно отделять, но пока так...
 
Сверху