Каталог, неограниченный по вложенности.

GeT

Новичок
Каталог, неограниченный по вложенности.

Кароче, столкнулся с такой проблемой.
Надо сделать каталог, в котором будет неограниченное количество подкаталогов (а у них будут еще подкаталоги).
Например:
1. Канцелярия.
1.1. Ручки.
1.1.1. Ручки шариковые
1.1.2. Ручки перьевые.
1.1.2.1. Ручки перьевые Parker.

и т.д.
Вопрос в том, где хранить структуру такого каталога. Пытался сначала с помощью XML - но получилось слишком геморно.
Думаю, это как-то можно организовать с помощью MySQL,только мне важно чтобы дерево каталогов выводилось с наименьшим количеством MySQL-запросов. Возможно ли это?
 

Azy

Новичок
Самый простой, но далеко не самый лучший способ:
Таблица вида
id
name -наименовние категории
path - путь в дереве.

те. в твоем примере
1. Канцелярия.
1.1. Ручки.
1.1.1. Ручки шариковые
1.1.2. Ручки перьевые.
1.1.2.1. Ручки перьевые Parker.
path это 1, 11, 111, 112,1121.
Если вложеных папок больше 10, то соответственно организуй в ввиде
01, 0101, 010101, 010102, 01010201.

Это самый простой пример.

А выборку сделать просто:
если надо показать все подкаталоги ручек перьевых - один запрос:
select * from table where path like '010102%'
 

_RVK_

Новичок
Самый простой, но далеко не самый лучший способ
А можно услышать обоснование этого утверждения? В чем приемущества твоего метода, и в чем недостатки NS?
 

Azy

Новичок
Автор оригинала: _RVK_
А можно услышать обоснование этого утверждения? В чем приемущества твоего метода, и в чем недостатки NS?
Преимущество данного типа дерева именно в простоте =). Наглядно видно что и откуда берется. Так же в отличии от НС добавлять новые подкатегории можно всего за один запрос (если нет необходимости вставки после конкретного элемента :D ). Разумеется в НС-е можно изголяться по всякому (оставлять дырки итд) =).
Для начала работы с деревьями - самое то.
 

_RVK_

Новичок
Azy
Так, вот, Nested Sets гораздо проще нежели кажется с первого взгляда, но на порядок бустрее твоего метода. Вставка элементов будет действительно быстрее и проще у тебя, но во первых в тех задачах, где следует использовать Nested Sets скоростью при вставках удалении можно принебречь, во-вторых есть готовые классы для этого, где уже реализованы методы для вставки, удаления, перемещения ветвей дерева.
Так что, я бы на твоем месте быстрее бы осваивал NS, и забыл бы о своем методе.
 

Azy

Новичок
_RVK_
Совершенно с тобой согласен =) НС работает гораздо быстрее. но имхо новичку проще будет начать с простого. А готовые классы - ну не люблю я их =)
 

_RVK_

Новичок
Azy
Вот инет. Есть поговорка "Нет ничего более постоянного чем временное решение". Потому новичку нужно начинать не с простого а с правильного решения.
А готовые классы - ну не люблю я и
Сам такой. Но тем лучше для тебя. Если есть время, напиши свой, кораздо лучше разберешься в задаче, получишь неоценимый опыт. Если получится лучше, можешь с остальными поделится ;)
 
Сверху