Каталог - уровни вложенности

Poster

Новичок
Каталог - уровни вложенности

Мужики.
Есть таблица каталога. Вот такого вида

id | name | parent_id
--+--------+------------
1 Сосиски 0
2 Говяд. 1
3 Свинин. 1
5 Мед 0
6 Гречан. 5
7 Цветочн. 5
8 Липов. 5
9 ...
-------------------------

Как сделать ограничение на количество вложенных уровней? Например 3:
Сосиски -> Говядина -> Бердичев
 

Tikrim

Guest
При добавлении новой записи проверяется сколько уровней уже есть

если уже 3 то вывести ошибку
 

Olorin

Guest
Poster
При такой структуре таблицы -- выбирать рекурсивно parent_id , начиная от того раздела, уровень которого надо узнать, пока parent_id не будет равен 0
 

rembo

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

Poster

Новичок
rembo
Имеешь в виду

"Для построения дерева достаточно знать последовательность вывода рубрик и их уровень в дереве. Добавим два поля с этими данными в таблицу: level (TINYINT(4). 127 уровней - хватит?) и sortorder (VARCHAR(128))." (с) Д. Лебедев

Это?
http://detail.phpclub.net/article/2002-06-03
 

rembo

Новичок
Re: Каталог - уровни вложенности

Нет не это, если нет возможности перейти на Nested Sets можно попробовать добавить поле level и проставлять его сразу при добавлении записи, это позволит не делать каждый раз делать рекурсивный обход дерева:

id | name | parent_id | level
--+--------+------------
1 Сосиски 0 1
2 Говяд. 1 2
3 Свинин. 1 2
5 Мед 0 1
6 Гречан. 5 2
7 Цветочн. 5 2
8 Липов. 5 2
9 ...
-------------------------
 

Poster

Новичок
rembo, ты как раз об этом и говоришь - добавить поле level и т.д.
http://detail.phpclub.net/article/2002-06-03

Макс, спасибо, читаю сейчас тебя в Избранном - почти то же но без рисунков.
 

LAMborginy

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