Mysql
 sql >> Database >  >> RDS >> Mysql

Visualizzare la colonna delle dimensioni come riga per ciascun prodotto a colori nella tabella correlata?

Non esiste alcun comando PIVOT (MySQL tabelle pivot (trasforma le righe in colonne) ) in MySQL, quindi la tua query sarà statica per dimensione. Ecco perché è meglio rimandare questo in applicazione.

Ho pensato che se hai solo un dominio limitato e piccolo per la colonna delle dimensioni, puoi utilizzare la seguente query che ho pubblicato di seguito:

mysql> SELECT 
    ->      c.color as color,
    ->      SUM(IF(s.size = 32, o.amount, 0)) as '32',
    ->      SUM(IF(s.size = 34, o.amount, 0)) as '34',
    ->      SUM(IF(s.size = 36, o.amount, 0)) as '36',
    ->      SUM(IF(s.size = 38, o.amount, 0)) as '38'
    ->  FROM `colors` c
    ->  INNER JOIN `order` o
    ->  INNER JOIN `sizes` s
    ->      WHERE c.`id` = o.`color` and s.`id` = o.`size`
    -> GROUP BY color 
    -> ;
+-------+------+------+------+------+
| color | 32   | 34   | 36   | 38   |
+-------+------+------+------+------+
| blue  |    3 |    4 |    2 |    0 |
| red   |    1 |    0 |    0 |    0 |
+-------+------+------+------+------+
2 rows in set (0.04 sec)

Come puoi vedere in condizioni IF, utilizzo il valore della dimensione che è ciò che voglio dire che la domanda è statica. Presumo che tutte le dimensioni possibili possano essere 32, 34, 36, 38.

Demo funzionante @SQL Fiddle

Modifica:come sto dicendo dall'inizio, se i valori delle dimensioni sono sconosciuti o il dominio è grande, è meglio che tu abbia posticipato il lavoro pivot all'interno dello script del tuo server (ad es. PHP), puoi comunque utilizzare la seguente query per elaborare nello script:

SELECT 
     c.color as color,
     s.size,
     o.amount  --Edit: added 
 FROM `colors` c
 INNER JOIN `order` o
 INNER JOIN `sizes` s
     WHERE c.`id` = o.`color` and s.`id` = o.`size`

Guarda come funziona @Fiddle SQL .