Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL relacionamento um para muitos:GROUP_CONCAT ou JOIN ou ambos?


Deduzindo de sua consulta, também há order_id campo em seu order_products tabela que você não mencionou na definição da tabela. Sua consulta deve então se parecer com:
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

Seu esquema de banco de dados é bastante estranho, porém, a tabela de pedidos parece que poderia ser removida e essa data movida para order_products, porque para cada linha order_products você tem referência à tabela de pedidos. Geralmente é o contrário - há muitos pedidos para cada produto referenciado pelo campo product_id na tabela de pedidos. Também a coluna de data nos pedidos é do tipo varchar - por que não date ou datetime?