Хранение дерево в БД

Nikoshka

Новичок
Хранение дерево в БД

http://phpclub.ru/detail/article/db_tree
Вот эту статью почитал и очень метод понравился :)
Собственно хочу такое сделать, но только чтобы можно было через админку добавлять категории. Возникает только одна проблема: когда я добавлю новую категорию, нужно будет поменять все смещения. Логично ли то?
Хотя учитыва простоту запроса на вывод категорий, то наверняка - да.
Как думаете можно ли такое осуществить?
Примеры кода из статья я что-то не понял :(
Что значит при создании категорий, как вот тут например:
PHP:
$level_2[0]=$Tree->insert($id,array("title"=>"Программирование"));
Слово insert?
 

Ping

Новичок
Всё что вам нужно это
id parent_id category
1 0 ботинки
2 1 синие
3 1 красные
4 3 красные с белым горошком
5 3 красные с синим горошком
6 2 синие с белым горошком
7 0 трусы
8 7 стринги

и т.д.
И рекурсия. В итоге.
1. Ботинки
1.1. Синие
1.1.1. Синие с белым горошком
1.2. Красные
1.2.1. Красные с белым горошком
1.2.2. Красные с синим горошком
2. Трусы
2.1. Стринги
и т.д.
 

Nikoshka

Новичок
Ping Popoff
Спасибо большое :)
И еще маленький вопросик, все ли получится реализовать для полноценного каталога при такой реализации дерева сайтов?

Т.к. с вложенными множествами несовсем понравилось.
 

Popoff

popoff.donetsk.ua
Nikoshka
Вы реализуйте. И если что-то конкретное не получится - скажете.
 

Nikoshka

Новичок
Popoff
Во воложенных множествах никак не могу понять, как добавлять категории?
Т.е. простая админка:

[Список того, что есть] [Поле для новой категории] [Кнопка добавить]

Вот так я делаю:
1. Берем правое смещение родителя
2. Делаем его левым для новой, правое делаем = левое +1
3. Все, что больше правого смещения родителя увеличиваем на два
4. Затем и его увеличиваем на два..

Но где-то в процессе выходит путаница, не могу понять где :(
 

zerkms

TDD infected
Команда форума
Nikoshka
нарисуй небольшое дерево на листе бумаги и проделай все операции медленно...
потом повтори в синтаксисе пхп
 

Nikoshka

Новичок
Все ок, я правильно составил :)
Только ошибся в коде, забыл +1 сделать. А так такое добавление работает прекрасно :)
 
Сверху