Я действительно борюсь с запросом вложенного набора в нашем магазине, управляемом PHP / MySQL, я буду использовать электронные компоненты в качестве примера.
Категории хранятся в виде модели вложенного набора (слева, справа иглубина).
Когда покупатель перемещается по магазину, он может фильтровать список товаров по марке, категории, ценовому диапазону и т. д.
Допустим, покупатель просматривает все товары Sony,У Sony будут продукты в области вычислительной техники, телевизоров, аудио и бытовой техники.
Но продукты Sony хранятся не в этих категориях (но они могут быть), они хранятся в подкатегориях этих основных категорий, таких как:
Televisions > LCD > Widescreen
Televisions > CRT
Computing > Optical Drives > DVD-RW
Computing > Input Devices > Wireless > Keyboards
Audio > Portable > MP3
Household Appliances
После того, как клиент выбрал Sony, я хочу, чтобы у него была возможность сузиться по категориям, чтобы у него изначально были следующие варианты:
Televisions
Computing
Audio
Household Appliances
Но я могутолько сделать запрос, который возвращает список определенных категорий:
Widescreen
CRT
DVD-RW
Keyboards
MP3
Household Appliances
Мне нужно показать основные категории, тогда, если клиент выберет Телевидение, он получит выбор:
LCD
CRT
Может ли кто-нибудь помочь мне с этим, желательно, чтобы информация возвращалась как можно быстрее, с минимальной рекурсией (следовательно, с использованием вложенных множеств в первую очередь) или слишком большим количеством запросов, я был бы очень признателен.
Вот запрос, который я использую, чтобы получить список подкатегорий, если он помогает со структурой базы данных:
select c.categories_id, cd.categories_name, c.parent_id, c.lft, c.rgt, c.dpth
from categories c
inner join categories_description cd on cd.categories_id = c.categories_id
inner join products_to_categories p2c on p2c.categories_id = c.categories_id
inner join products p on p.products_id = p2c.products_id
where cd.language_id='1'
and c.lft between 3489 and 3670
and c.categories_status = '1'
group by c.categories_id
order by sort_order, cd.categories_name
В качестве базы данныхПервоначально это была структура модели смежности, для каждого идентификатора категории также хранится родительский идентификатор, если это что-то упрощает.
Спасибо.