Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL връзка едно към много:GROUP_CONCAT или JOIN или и двете?

Предполагам, че от вашата заявка има и order_id поле във вашите order_products таблица, която не сте споменали в дефиницията на таблицата. Вашата заявка трябва да изглежда така:

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

Вашата db схема обаче е доста странна, таблицата с поръчки изглежда, че може да бъде премахната и тази дата да бъде преместена в order_products, защото за всеки ред order_products имате препратка към таблицата с поръчки. Обикновено е обратното - има много поръчки за всеки продукт, посочен в полето product_id в таблицата с поръчки. Също така колоната за дата в поръчките е от тип varchar - защо не дата или дата и час?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL търсене на поле utf8_bin, чувствително към главни букви

  2. странно кодиране на символи на съхранените данни, старият скрипт им показва добре, новият не го прави

  3. Случаи на използване на MySQL `FORCE INDEX`?

  4. Достъпът до MYSQL във външния файл е отказан - но моят потребител има ЦЯЛ достъп.. и папката е CHMOD 777

  5. Времето за промяна на експортирането на MySQL данни