Фон
Продукты можно продавать в пачках. Присутствуют следующие таблицы: products
, bundles
, bundles_products
, orders
, orders_products
.
Можно сказать, что заказ «содержит» пакет, если он содержит все продукты пакета.
Задача
Как можно посчитать заказы на связки?
Пример
продукты стол
id name
1 broom
2 mug
3 spoon
4 candle
связки стол
id name
1 dining
2 witchcraft
bundles_products таблица
bundle_id product_id
1 2
1 3
2 1
2 4
orders_products table
order_id product_id
1000 1
1000 3
1001 1
1001 2
1001 3
Запрос вернет следующую таблицу:
bundle orders
dining 1
witchcraft 0
Примечания
В примере намеренно пропущена таблица orders
, так как она не относится к тому, что в ней содержится.
Конечно, к этому можно было бы обязательно обратиться, написав некоторый код и собрав данные, но я надеялся, что существует декларативный SQL-способ запросов для такого рода вещей?
Одна из идей, которые у меня возникли, состояла в том, чтобы использовать GROUP_CONCAT
, чтобы объединить все продукты пакета и как-то сравнить его с продуктами каждого заказа. Тем не менее, далеко не ясно.