Как вывести товары по дереву категорий?

Всем привет! Есть к примеру дерево категорий:
- транспорт (1)
-- автомобили (2)
--- легковые (5)
--- грузовые (3)
-- мотоциклы (4)
--- спорт (7)
--- кросс (6)

В скобках - это условные ID категории

Предположим пользователь открыл категорию с ID = 1 (транспорт).
Как в этом случае вывести все товары которые находятся в этой категории и во всех дочерних по дереву? Ведь товар хранит в себе только ID той категории в которой он находится непосредственно. т.е. если товар лежит в категории "грузовые", то в таблице `ads` в поле `category_id` хранится цифра 3.

Я думал рекурсивно получить все категории под ID 1 потом их подкатегории потом следующих и т.д. Собрать это все в один массив, прогнать его через $tree_category = implode(',', $array_cats); и вытащить примерно таким запросом:
SELECT * FROM `ads` WHERE `category_id` IN($tree_category);


Но это все ерунда наверное? куча запросов и одному богу известно сколько там получится запятых в $tree_category
  • Вопрос задан
  • 484 просмотра
Пригласить эксперта
Ответы на вопрос 2
Комментировать
@d-stream
Готовые решения - не подаю, но...
Нормальный подход:
запросить дерево в виде плоского списка (join дерева самого на себя по паренту) и к этому запросу приджойнить уже товары

конкретный запрос зависит от конкретной структуры категорий
так что как минимум надо бы привести структуру этой таблицы
(хотя почти не гадая - это id, parent_id, описание )
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы