Вопрос по теории (выборка объектов из базы данных)

deepslam

Новичок
Вопрос по теории (выборка объектов из базы данных)

Всем привет!

У меня есть вопросик по теории , обрисую задачу:

Есть рубрики , обычное дерево , т.е. id категории, id подкатегории и т.д. , вложенность неограничена.

Пусть у каждой рубрики будут товары , у каждого товара соответственно указывается id рубрики.

Суть задачи в следующем : при заходе в раздел мне нужно показать все товары, включая те , которые во всех подразделах.

Я так понимаю нужно при выборке товаров просто указывать where id_категории = 1 or id_категории=2 , 3 ,4 ,6 ,8 и т.п. Т.е. сначала выбрать все подразделы рубрики , узнать их id и потом подставить в запрос...

нет ли более красивого решения?
 

Alexandre

PHPПенсионер
есть куча решений с деревьями на http://phpclub.ru/detail/
как вариант добавь в структуру своего дерева колонку root_id - рутовую категорию, для данной подкатегории...
тогда твой запрос сведется к
where id_root_категории = 1
 

HEm

Сетевой бобер
я использую вариант со строкой -
поле path где через разделитель перечислены все предки, например
|1|10|267|1289|
потом достаточно условия [SQL]WHERE path LIKE '%|10|%'[/SQL] чтобы выбрать все имеющее предком id=10
 

deepslam

Новичок
Ок , спасибо за интересные предложения , только про root_id не очень понял , оно будет работать только для корневой рубрики
 

cranchzerro

Новичок
Автор оригинала: deepslam
про root_id не очень понял , оно будет работать только для корневой рубрики
нет, оно будит работать для оптимизация выбора первого предка ноды... иначе смысла не имеет.
http://www.webscript.ru/stories/04/09/01/8197045
только, имхо, вложенные множества не лучшее решение для управления иерархическими структурами

Joe Celko "Trees And Hierarchies in SQL for Smarties"
 

HEm

Сетевой бобер
Alexandre
для базы в несколько тысяч записей (товары, продаваемые фирмой) приемлемо
 

Фанат

oncle terrible
Команда форума
HEm, какой-то у тебя недоматериализованный путь =)
Ведь если выровнять предков по одной длине, то можно будет не только выбирать, но и сортировать, автоматом строя дерево.
 

Alexandre

PHPПенсионер
для базы в несколько тысяч записей (товары, продаваемые фирмой) приемлемо
согл...
Ведь если выровнять предков по одной длине, то можно будет не только выбирать, но и сортировать, автоматом строя дерево
тоже хорошая идея.
 

deepslam

Новичок
Hem - а если например ты создаешь подраздел , то это получается у все записей нужно путь менять?
также с удалением...
А если у меня например будет 2000 разделов , это практически лишние 2000 запросов за 1 раз! (утрирую конечно)
 

Фанат

oncle terrible
Команда форума

HEm

Сетевой бобер
deepslam
я там ничего руками не создаю, не меняю и не удаляю
таблица меняется по крону раз в сутки, берется из 1С

если и надо было бы чтото менять - эта операция выполняется в таких задачах редко и переживать по поводу того что она загрузит сервер не стоит
тут классическое "один раз создали - десять/тыщу/миллион раз посмотрели", как раз то, в чем силен мускул
 
Сверху