Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Größenspalte als Zeile für jedes Farbprodukt in zugehöriger Tabelle anzeigen?

Es gibt keinen PIVOT-Befehl (MySQL Pivot-Tabellen (Zeilen in Spalten umwandeln) ) in MySQL, sodass Ihre Abfrage hinsichtlich der Größe statisch ist. Deshalb ist es besser, dies in der Anwendung zu verschieben.

Dachte, wenn Sie nur eine endliche und kleine Domäne für die Größenspalte haben, können Sie die folgende Abfrage verwenden, die ich unten gepostet habe:

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)

Wie Sie in den IF-Bedingungen sehen können, verwende ich den Wert der Größe, das heißt, die Frage ist statisch. Ich gehe davon aus, dass alle möglichen Größen entweder 32, 34, 36, 38 sein können.

Funktionierende Demo @SQL Fiddle

Bearbeiten:Wie ich von Anfang an sage. Wenn Größenwerte unbekannt sind oder die Domäne groß ist, ist es besser, die Pivot-Arbeit in Ihrem Serverskript (z. B. PHP) aufzuschieben. Sie können dennoch die folgende Abfrage zur Verarbeitung im Skript verwenden:

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`

Sehen Sie, wie es funktioniert @SQL-Fiddle .