SQL: Получить продукты из категории, но также должны быть в другой набор категорий
Я сейчас застрял в ситуации. Сценарий такой. У меня есть продукты, которые могут быть связаны с несколькими категориями. Структура данных показана ниже:
Products Table:
product_id name
1 Lemon
2 Kiwis
3 Cheese
Таблица продуктов по категориям
product_id category_id
1 1
1 2
1 3
2 1
2 3
3 2
3 4
Таблица категорий (не требуется в запросе, однако добавьте ее здесь, чтобы помочь визуализировать происходящее)
category_id name
1 Fruit
2 Yellow
3 Round
4 Dairy
Что я'Я борюсь с тем, что изначально я хочу получить все продукты, которые находятся в категории фруктов (категория ID 1), но я также хочу проверить, является ли фрукт желтым. Имейте в виду, что желтый не будет единственным фильтром, иногда я захочу вернуть желтый и оранжевый фрукты, однако, так как сыр желтый, я могу ».не вернуть, так как это не такт фрукт. Однако, чтобы сделать вещи немного проще, я всегда знаю, что я буду смотреть на категорию фруктов в качестве основы.
Структура базы данных не может быть изменена как структура базы данных opencart.
Вот мои попытки:
SELECT GROUP_CONCAT(DISTINCT p2c2.category_id SEPARATOR ',') as categories
FROM oc_product_to_category p2c
LEFT JOIN oc_product p ON (p.product_id = p2c.product_id)
LEFT JOIN oc_product_to_category p2c2 ON (p.product_id = p2c2.product_id)
WHERE p2c.category_id IN ('1','2')
Этот вид работ за исключением того факта, что он вернет сыр.
Примечания: Я использую Group Concat, потому что в конце всего этого моя цель состоит в том, чтобы вернуть не столько продукты, которые соответствуют этим категориям, но на основе фильтров я хочу вернуть еще один список категорий из продуктов, которые соответствуют этим критериям. Так:
Сценарий:
Получить продукты, которые соответствуют критериям категории. Вернуть категории этих продуктов.
Любая помощь будет принята с благодарностью.