Ud fra din forespørgsel er der også order_id
felt i din order_products
tabel, du ikke nævnte i tabeldefinitionen. Din forespørgsel skal så se sådan ud:
SELECT c.name AS category_name,
SUM( s.subtotal ) AS amt,
GROUP_CONCAT( CONCAT(s.name, ' - ', s.subtotal ) SEPARATOR ', ' ) AS subtotals
FROM
product_category c
JOIN
( SELECT op.category, op.name, sum(op.qty*op.unit_price) AS subtotal
FROM order_products op
JOIN orders o ON o.id = op.order_id
WHERE o.date > '2012-03-31'
GROUP BY op.category, op.name ) s
ON s.category = c.id
GROUP BY c.name
Dit db-skema er dog ret underligt, ordretabellen ser ud til at kunne fjernes og den dato flyttes til ordre_produkter, fordi du for hver række ordre_produkter har reference til ordretabellen. Normalt er det den anden vej - der er mange ordrer for hvert produkt, der refereres af produkt_id-feltet i ordretabellen. Også datokolonne i ordrer er af typen varchar - hvorfor ikke dato eller datoklokkeslæt?