Сохранение сущностей, отличных в запросе отношения «многие ко многим» - PullRequest
0 голосов
/ 20 марта 2019

У меня есть 3 объекта в базе данных:

  • Продукты

    • ID
    • имя
    • 1012 * Код *
  • Категории

    • ID
    • имя
  • ТоварыЗаказ

    • ID
    • product_id
    • line_total
    • sale_date

Продукты имеют отношение «многие ко многим» с категориями (со сводкой category_product), и существует отношение «один ко многим» между продуктами и элементами заказа (продукты - <элементы заказа). </p>

Продукт может иметь несколько категорий, так что, например, обувь может быть включена как в категорию мужской> обувь, так и в категорию женская> обувь и т. Д., Но когда сгруппировано название категории, все категории «обувь» будут сгруппированы вместе.

Проблема, с которой я столкнулся, состоит в том, что мой запрос для расчета продаж для каждой категории включает дублирующиеся продажи, если товар относится к нескольким категориям:

SELECT c.name,SUM(oi.line_total) AS total
FROM products p

INNER JOIN category_product cp
ON p.id = cp.product_id

INNER JOIN categories c 
ON c.id = cp.category_id

LEFT JOIN orderitems oi
ON oi.product_id = p.id

WHERE oi.sale_date BETWEEN '2018-11-19 00:00:00' AND '2018-11-25 23:59:59'

GROUP BY c.name

Так, например, если продается товар за 15.99 за продукт, который продается как в мужской, так и в женской обуви, он будет считаться 31,98.

Я могу проверить, сколько раз строка включена:

SELECT oi.id ,count(oi.id) AS count
FROM products p 

INNER JOIN category_product cp
ON p.id = cp.product_id

INNER JOIN categories c 
ON c.id = cp.category_id

LEFT JOIN orderitems oi
ON oi.product_id = p.id

WHERE oi.sale_date BETWEEN '2018-11-19 00:00:00' AND '2018-11-25 23:59:59'

GROUP BY oi.id

Что еще хотелось бы знать, так это как ограничить включение элементов заказа в совокупность (SUM ()), чтобы получить точный показатель продаж для категорий

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...