![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
taral |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 17.1.2008 Репутация: нет Всего: нет |
Доброго времени суток уважаемые форумчане! Вот думаю как оптимально решить задачу.
Есть таблица: id_sort id_parent title С ее помощью формируется дерево разделов. Например: Аудио, видео, фото техника Телевизоры ЭЛТ, LCD, плазменные телевизоры Портативные (автомобильные) телевизоры Аксессуары для телевизоров Фото техника Видео и Web камеры Компьютеры Мобильная связь .............. в таблице id_sort уникальный ключ. id_parent уникальный ключ родителя раздела и title название раздела. А теперь собственно задача. Когда мы находимся в категории ЭЛТ, LCD, плазменные телевизоры Показывается менюшка Аудио, видео, фото техника -> Телевизоры -> ЭЛТ, LCD, плазменные телевизоры Когда находимся в категории Телевизоры показывается Аудио, видео, фото техника -> Телевизоры пока что я вижу 3 решения данной задачи. 1) по id категории находим его родителя по id родителя находим его родителя и т.д. недостаток что будет много запросов в базу. при вложенности 10 будет 10 запросов. Потому данный метод я откинул 2) добавить в таблицу еще одну ячейку в которой хранить строку всех родителей. что-то вроде <a href="...">Аудио, видео, фото техника</a> -> <a href="...">Телевизоры</a> -> ЭЛТ, LCD, плазменные телевизоры Вариант не нравится. Много лишнего текста. Да и если сайт переедет переедет то ссылки работать не будут. Потому вариант откинул. 3) добавить в ячейкустроку в которой хранить id всех родителей. Что-то вроде 12 23 45. И еще одним запросом получаем строку иерархии. К 3-му варианту и склоняюсь. Может есть метод лучше? |
|||
|
||||
lelik133 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 517 Регистрация: 5.2.2003 Где: Москва Репутация: 3 Всего: 14 |
есть называется Nested Sets (вложенные множества)
вот ссылочка для ознакомления http://www.internet-technologies.ru/articl...rticle_635.html ну и google в помощь инфы по ним много. Это сообщение отредактировал(а) lelik133 - 4.2.2009, 23:14 |
|||
|
||||
destrd |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 1.10.2008 Репутация: 1 Всего: 4 |
Чёт я не пойму, в третьем варианте типа вы не будете запрашивать категории с этим парентом?
--------------------
Some people, when confronted with a problem, think, "I known, I'll use regular expressions." Now they have two problems. -- Jamie Zawinski in comp.lang.emacs |
|||
|
||||
taral |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 17.1.2008 Репутация: нет Всего: нет |
2destrd
Наоборот. Там перечисляются id категорий родителей. lelik133 Огромное спасибо. Ознакомлюсь. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
можно одним запросом получить и єлемент и всех его непосредственных родителей. да, только у nested sets есть конструктивное ограничение. на этом механизме обощенный граф не построишь - только дерево. значит, продукт не может относиться к нескольким категориям, и подкатегория будет относиться только к одной категории. А кроме строгого разделения по "полочкам" для продуктов могут применяться и обобщающие категории, вроде "романтический подарок ко Дню святого Валентина" или "эксклюзив" - при использовании netsted sets не "параллельные" ирерархии придется хранить в разных таблицах или вводить доп. поле |
|||
|
||||
taral |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 17.1.2008 Репутация: нет Всего: нет |
lelik133 Обалдеть! Еще раз спасибо! Прослушал я лекции про деревья в универе =( Тогда казалось что не понадобится.
Добавлено @ 00:30 Я так понял что при добавлении новой категории значения (left right) будут переписываться. Это сообщение отредактировал(а) taral - 5.2.2009, 00:30 |
|||
|
||||
taral |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 17.1.2008 Репутация: нет Всего: нет |
Класс! Все равно способ очень хороший!
|
|||
|
||||
lelik133 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 517 Регистрация: 5.2.2003 Где: Москва Репутация: 3 Всего: 14 |
skyboy, ну про то что элемент должен присутствовать в нескольких категориях автор не упоминал
![]() |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
lelik133, не, ну я уточнил неочевидные(как на меня) на первый взгляд(как на меня) вещи. против nested sets абсолютно ничего не имею.
|
|||
|
||||
taral |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 17.1.2008 Репутация: нет Всего: нет |
Всем спасибо. Я думаю что все вопросы решены. Потому закрываю тему.
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |