У меня есть 2 таблицы:
Products(..., category_id)
Categories(id, name, level_1_parent_id, level_2_parent_id)
category_id
- это внешний ключ для Categories(id)
Если уровень первого уровня level_1_parent_id
равен NULL,
Если категория второго уровня level_2_parent_id
равна NULL, level_1_parent_id
,
если установлены третий уровень.
Я выбираю такие продукты, как это
SELECT *
FROM Products
WHERE category_id = ${category_id}
Что мне нужно достичь: выберите продукты из дочерних категорий, если это их первая или вторая категория.
Так, например, если я выбираю из категории с id == 1
(который является идентификатором первого уровня), я хочу выбрать продукты с category_id
равными 1
и другими категориями с level_1_parent_id == 1
и теми же для категории второго уровня.
Это возможно как-то?
мы можем использовать вложенный запрос здесь.
SELECT * FROM Продукты WHERE category_id = $ {category_id} или
category_id в (выберите отдельный идентификатор из категорий, где level_1_parent_id = $ {category_id} или level_2_parent_id = $ {category_id})
Вы получаете список категорий, сначала присоединяясь к таблице, затем получаете продукты, связанные с каждой из найденных категорий. Обратите внимание на использование псевдонима для каждой из таблиц в предложениях from и join.
SELECT *
FROM Categories c1
LEFT JOIN Categories c2
ON c2.level_1_parent_id = c1.id
LEFT JOIN Categories c3
ON c3.level_1_parent_id = c1.id AND c3.level_2_parent_id = c2.id
JOIN Products p
ON p.category_id = c1.id OR p.category_id = c2.id OR p.category_id = c3.id
WHERE c1.category_id = ${category_id}