| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Базы Данных > иерархия всех родителей раздела |
| Автор: taral 4.2.2009, 22:02 |
| Доброго времени суток уважаемые форумчане! Вот думаю как оптимально решить задачу. Есть таблица: 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 4.2.2009, 23:14 |
| есть называется Nested Sets (вложенные множества) вот ссылочка для ознакомления http://www.internet-technologies.ru/articles/article_635.html ну и google в помощь инфы по ним много. |
| Автор: destrd 4.2.2009, 23:17 |
| Чёт я не пойму, в третьем варианте типа вы не будете запрашивать категории с этим парентом? |
| Автор: taral 5.2.2009, 00:07 |
| 2destrd Наоборот. Там перечисляются id категорий родителей. lelik133 Огромное спасибо. Ознакомлюсь. |
| Автор: skyboy 5.2.2009, 00:08 |
можно одним запросом получить и єлемент и всех его непосредственных родителей. да, только у nested sets есть конструктивное ограничение. на этом механизме обощенный граф не построишь - только дерево. значит, продукт не может относиться к нескольким категориям, и подкатегория будет относиться только к одной категории. А кроме строгого разделения по "полочкам" для продуктов могут применяться и обобщающие категории, вроде "романтический подарок ко Дню святого Валентина" или "эксклюзив" - при использовании netsted sets не "параллельные" ирерархии придется хранить в разных таблицах или вводить доп. поле |
| Автор: taral 5.2.2009, 00:23 |
| lelik133 Обалдеть! Еще раз спасибо! Прослушал я лекции про деревья в универе =( Тогда казалось что не понадобится. Добавлено @ 00:30 Я так понял что при добавлении новой категории значения (left right) будут переписываться. |
| Автор: taral 5.2.2009, 01:13 |
| Класс! Все равно способ очень хороший! |
| Автор: lelik133 5.2.2009, 11:44 |
| skyboy, ну про то что элемент должен присутствовать в нескольких категориях автор не упоминал |
| Автор: skyboy 5.2.2009, 12:58 |
| lelik133, не, ну я уточнил неочевидные(как на меня) на первый взгляд(как на меня) вещи. против nested sets абсолютно ничего не имею. |
| Автор: taral 5.2.2009, 15:16 |
| Всем спасибо. Я думаю что все вопросы решены. Потому закрываю тему. |