иерархия с несколькими родителями

novikov

Новичок
иерархия с несколькими родителями

есть 2 таблицы

в 1 категории (уникальный id, ...).
во 2 отношения между категориями (id parent, id child (ид из 1 таблицы)).
категория может иметь несколько родителей

нужно построить иерархию на этой системе. как осуществить это, не задавая
отдельный запрос в бд по каждому паренту.
 

Nirva

Dmitry Polyakov
а ты уверен, что это гениальная реализация дерева или я чего-то не понял?
тебе достаточно одной таблицы c полями id, id_parent.

-~{}~ 03.04.05 03:56:

Вот еще, да.
http://detail.phpclub.net/article/db_tree
 

Crazy

Developer
Nirva, у него "категория может иметь несколько родителей". :)
 

novikov

Новичок
дык, а по существу?

я придумал только загнать все в многомерный массив...
 

Crazy

Developer
Каково количество элементов в этой так называемой иерархии?
 

Crazy

Developer
novikov, если ты не состоянии оценить даже порядок -- срочно меняй работу.
 

Demiurg

Guest
Интересно, а что случиться, если записи будут такие:
1 таблица :
id
1
2

2 таблица :
parent_id child_id
1 2
2 1
 

Мутник

Новичок
Demiurg

бесконечный цикл!? :)

novikov
Ты что то изначально делаешь не так.
Лучше приведи конкретный пример - тебе помогут найти более оптимальное решение, нежели такой изврат
 

neko

tеam neko
народ ;-)
в иерархии не может быть несколько родителей
 

neko

tеam neko
то что деми нарисовал это направленный граф
только вместо parent_id это должно называть node1 и node2 ;-)
 

novikov

Новичок
я все понял. для цмс я сделаю количество уровней <= 2. и сделаю отдельные таблицы для категорий и подкатегорий.

а если писать каталог ссылок, где
1 уровень корень
2 уровень язык
3 уровень принцип разделения ссылок
4 категория
5 подкатегория1
....
N+6 подкатегорияN

нужно юзать класс пеар для Nested Sets?
 

Мутник

Новичок
novikov

так НЕ надо делать...
надо делать либо стандартно

id | p_id| ... | .. |

либо использовать nested sets
 

3BEP

Новичок
Я бы сказал что нужно разбить этот бред на несколько простых деревьев, добавив в таблицу с отношениями поле с идентификатором дерева.

tbl ...childs
nodeid | childid | id_tree
1 | 2 | 1
1 | 3 | 1
1 | 4 | 1
2 | 5 | 1
2 | 6 | 1
2 | 3 | 2
и т.д.

Деревья можно выделять по логике представления, соответственно у каждого дерева будет свой "корень" - узел, который согласно логике представления не имеет родителя. При этом корневой узел не обязательно не имеет родителя вообще.
 

fixxxer

К.О.
Партнер клуба
а, быть может, автор вопроса попытается графически изобразить свою структуру с обоснованием, на кой это надо?
пока что мне кажется, что кто-то успешно переворачивает деревья. =)
 

Izvrat

Guest
по моему, эт очень логичная структура, то эт кажись не дерево, а частны случай `сетей`, и польза от нее очень даже обоснованая.... т.е.
в смысле...
дерево - связь таблицы самой с собой, один ко многим
даная ситуация - связь таблицы самой с собой, много ко многим .... только и всего
пример: иерархия классов си, когда она вррода как есть, но каждый класс может наследоваться от нескольких родителей
бывает что не страшна даже рекурсивная связь и не обязательно она будет цыклить!
пример - рабочий столл лежит в папке виновс а она на диске, а диске в мой комп итд
 
Сверху