Mysql
 sql >> Base de données >  >> RDS >> Mysql

Relation un à plusieurs MySQL :GROUP_CONCAT ou JOIN ou les deux ?

D'après votre requête, il y a aussi order_id champ dans votre order_products table que vous n'avez pas mentionnée dans la définition de la table. Votre requête devrait alors ressembler à :

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

Votre schéma de base de données est assez étrange cependant, la table des commandes semble pouvoir être supprimée et cette date déplacée vers order_products, car pour chaque ligne order_products, vous avez une référence à la table des commandes. C'est généralement l'inverse - il existe de nombreuses commandes pour chaque produit référencé par le champ product_id dans la table des commandes. De plus, la colonne de date dans les commandes est de type varchar - pourquoi pas date ou datetime ?