вывод иерархичной базы, как?

ZETN1S

Новичок
вывод иерархичной базы, как?

есть бд такого типа:

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

ZETN1S

Новичок
Понятное дело что рекурсия
но по какому принципу и как?
мне бы пример.
 

Фанат

oncle terrible
Команда форума
у рекурсии только один принцип - рекурсия
можно почитать в википедии, а можно посмотреть здесь, в разделе вопрос-ответ
 

ExcluZZ

Новичок
Вот тебе кусок моего кода, но тут без пол литра не разобраться))
т.к. код писался для jquery дерева и много ньюансов моей цмски,
а вообще в двух словах так:
пишешь функцию вывода главных разделов со входящим значением которое определяет что раздел главный
главные разделы в любом случае будешь перебирать тем или иным цыклом и
в конце тела цикла вызываешь эту самую функцию, только входящим значением ставишь id текущего раздела, т.е. того
по которому пробегается в данный момент цикл.

аляськи масяськи готово дерево) это самый простой и логичный вариант)

вот для тебя даже лишнее попытался убрать чтобы тебе суть было проще увидеть...


PHP:
function admin_content_tree($parent_line_admcontree = "0")
{
	$query_admcontree = mysql_query("SELECT .............");
	if(mysql_num_rows($query_admcontree) != 0)
	{
		while($line_admcontree = mysql_fetch_array($query_admcontree))
		{
			blabla
			admin_content_tree($line_admcontree['id']);
		}
	}
}
 

eltoko

Новичок
интересно, а как вывести дерево, если одна категория может находиться в нескольких? :)

да и со структурой бы определиться ))

TABLE category
id name
1 имя1
2 имя2
3 имя3

TABLE owner
id_cat parent
1 NULL
2 NULL
3 1
3 2

а в итоге получить дерево, используя минимум запросов к БД:
1 имя1
- 3 имя3
2 имя2
- 3 имя3

ЗЫ: тут явно без order`а не обойтись, да? причем поле order во второй таблице...
и тогда можно будет одним запросом вывести всё дерево в массив:

SELECT t2.id_cat, t1.name FROM owner AS t2, category AS t1 WHERE t1.id=t2.id_cat ORDER BY t2.order
правильно?
 

prolis

Новичок
Автор оригинала: eltoko
интересно, а как вывести дерево, если одна категория может находиться в нескольких? :)
вышеприведенный алгоритм выведет и такой изврат
 

eltoko

Новичок
prolis
вышеприведенный алгоритм выведет и такой изврат
при постройке обычного дерева категорий мне удается обходиться без рекурсии - одним запросом, а не тысячью :)
 

prolis

Новичок
eltoko молодец! доведи количество уровней вложенности с 2 до N
 

eltoko

Новичок
prolis
неограниченная вложенность!
вводишь в таблицу категорий поле orders, которое имеет в итоге уникальное значение (!), т.е. сортировщик не по итему, а по всей таблице, и поле level (хранит в себе уровень вложенности категории)
и одним запросом с ORDER BY orders у тебя в $массиве структурированное дерево! и уже в пхп что хошь с ним то и делай :)

ну и parent конечно в таблице имеется.
 
Сверху