@dev400

Как сделать такой вывод из базы?

таблица Категории
id
cat_name
cat_url
parent

и таблица Товары
..
cat_id
..
..

Выбираю список товаров по cat_url.
$sql = "SELECT " . parent::PREFIX . $this->table . ".*, categories.cat_url, categories.cat_name
                              FROM {$this->table} INNER JOIN categories
                              ON categories.id = {$this->table}.cat_id WHERE categories.cat_url = :category_url";

Бывает такое что в категории "Краски" есть только подкатегории, а в ней товаров нет. Если переходим по ссылке "Краски", то получаем ошибку.
Как вывести все товары всех подкатегорий этой категории?
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
qonand
@qonand
Software Engineer
для уровня вложенности категория->подкатегория
можно сделать так:
SELECT products.*, categories.cat_url, categories.cat_name
FROM products INNER JOIN categories
ON categories.id = products.cat_id
WHERE categories.cat_url = :category_url OR
categories.parent in (SELECT id FROM categories WHERE cat_url = :category_url)

но если у Вас уровень вложенности больше рекомендую ознакомится с подходом Nested set или прочими подходами для работы с деревьями
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Alyovkin
@Alyovkin
Full-stack developer
Используйте LEFT JOIN
SELECT cat.cat_url, cat.cat_name, prod.name  
FROM categories cat 
LEFT JOIN products prod 
ON prod.cat_id = cat.id
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы