-faqer-
Я только учусь
Поиск товаров в каталоге
Есть древовидная структура каталога товаров построенная по принципу NestedSets
Cat
Id|title|left|right|level
Каталог планируется достаточно большой и разветвленный
Допустим, как price.ua
Категории могут быть двух типов: которые содержат подкатегории, которые содержат продукты. Смешанного содержимого (категории и продукты) быть не может
Есть таблица товаров, связанная с первой таблицей
Prod
Id|category|title
Предположим есть такая структура
+Принтеры
++Матричные
+++А4
+++А3
++Лазерные
+++Монохромные
++++А4
++++А3
+++Цветные
++++А4
++++А3
Не проблема сделать запрос на поиск категорий в которых есть товары с названием, допустим, содержащим usb. А также на вывод количества найденных товаров
SELECT cat.title as cat, COUNT(prod.title) AS c FROM cat, prod WHERE cat.id = prod.category AND prod.title LIKE '%usb%' GROUP BY cat
Такой запрос нам выведет, допустим
А4 – 3
А4 – 5
А как сделать, чтоб вывод был красив
Вот так
+Принтеры
++Матричные
+++А4 - 3
++Лазерные
+++Монохромные
++++А4 – 5
Т.е. получить катеогрии, содержащие искомый товар, а также всех предков этих категорий
Реальный пример можно увидеть на том же price.ua забив что либо в поиск справа вверху
Мой вариант:
- указанным выше методом находим все категории, которые содержат искомый товар
- рекурсивно для каждой категории находим всех предков и заносим их в массив с ключем равным значению left (таким образом, если у нескольких категорий одни родители, то мы просто еще раз перезапишем элемент массива с таким же left)
- проходим по созданному массиву и выводим структуру
Вроде как все неплохо
Только вылазит такое количество циклов, что мне кажется, при большой структуре каталога, такой подход будет серьезно тормозить. Есть ли какой-то иной вариант??
Есть древовидная структура каталога товаров построенная по принципу NestedSets
Cat
Id|title|left|right|level
Каталог планируется достаточно большой и разветвленный
Допустим, как price.ua
Категории могут быть двух типов: которые содержат подкатегории, которые содержат продукты. Смешанного содержимого (категории и продукты) быть не может
Есть таблица товаров, связанная с первой таблицей
Prod
Id|category|title
Предположим есть такая структура
+Принтеры
++Матричные
+++А4
+++А3
++Лазерные
+++Монохромные
++++А4
++++А3
+++Цветные
++++А4
++++А3
Не проблема сделать запрос на поиск категорий в которых есть товары с названием, допустим, содержащим usb. А также на вывод количества найденных товаров
SELECT cat.title as cat, COUNT(prod.title) AS c FROM cat, prod WHERE cat.id = prod.category AND prod.title LIKE '%usb%' GROUP BY cat
Такой запрос нам выведет, допустим
А4 – 3
А4 – 5
А как сделать, чтоб вывод был красив
Вот так
+Принтеры
++Матричные
+++А4 - 3
++Лазерные
+++Монохромные
++++А4 – 5
Т.е. получить катеогрии, содержащие искомый товар, а также всех предков этих категорий
Реальный пример можно увидеть на том же price.ua забив что либо в поиск справа вверху
Мой вариант:
- указанным выше методом находим все категории, которые содержат искомый товар
- рекурсивно для каждой категории находим всех предков и заносим их в массив с ключем равным значению left (таким образом, если у нескольких категорий одни родители, то мы просто еще раз перезапишем элемент массива с таким же left)
- проходим по созданному массиву и выводим структуру
Вроде как все неплохо
Только вылазит такое количество циклов, что мне кажется, при большой структуре каталога, такой подход будет серьезно тормозить. Есть ли какой-то иной вариант??