Antwort #5 am: 24. August 2017, 02:44:43
Hallo Tele09,
Falls Dich direkter Kontakt mit der Datenbank nicht gruselt, kann Dir als Workaround, bis es mal vernünftige Lösungen für Deine Fragestellung gibt, folgendes SQL weiterhelfen:
SELECT date_format(o.date_purchased, '%Y-%m') zeitraum, COALESCE(SUM(op.products_quantity), 0) anzahl
FROM orders o
LEFT JOIN orders_products op ON op.orders_id = o.orders_id AND op.products_model = '4711'
GROUP BY 1
ORDER BY 1 DESC
Ich erklär mal:
Mit
date_format(o.date_purchased, '%Y-%m') gruppierst Du das Ergebnis nach dem gewünschten Zeitraum, hier Jahr und Monat. Andere Zeitraster bekommst Du durch einen anderen Formatstring, wöchentlich mit '%Y KW %v', täglich mit '%Y-%m-%d'. Der Rest der Abfrage bleibt gleich.
coalesce(sum(op.products_quantity), 0) liefert Dir die Anzahl der bestellten Artikel, es können ja mehr als einer in einer Bestellung sein. Wenn es keine gibt, wird 0 ausgegeben.
Das
left join statt join sorgt dafür, dass Du den Zeitraum (zumindest aller Aufträge) lückenlos bekommst, Du willst ja auch wissen, in welchen Zeitintervallen 0 Artikel dieser Artikelnr bestellt wurden.
... and op.products_model = '4711' schränkt die Ergebnismenge auf die gewünschte Artikelnr 4711 ein.
Das ganze gruppiert und absteigend sortiert nach Zeitraum.
LG Volker