Il n'y a pas de commande PIVOT (MySQL tableaux croisés dynamiques (transformer les lignes en colonnes) ) dans MySQL afin que votre requête soit statique pour la taille. C'est pourquoi il est préférable de reporter cela dans l'application.
Pensé que si vous avez juste un domaine fini et petit pour la colonne de taille, vous pouvez utiliser la requête suivante que j'ai publiée ci-dessous :
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)
Comme vous pouvez le voir dans les conditions IF, j'utilise la valeur de la taille, c'est ce que je veux dire, la question est statique. Je suppose que toutes les tailles possibles peuvent être soit 32, 34, 36, 38.
Démo de travail @SQL Fiddle
Modifier :Comme je le dis depuis le début, si les valeurs de taille sont inconnues ou si le domaine est grand, il vaut mieux que vous reportiez le travail de pivot dans votre script de serveur (par exemple, PHP), vous pouvez toujours utiliser la requête suivante pour traiter dans le 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`
Voyez comment ça marche @violon SQL .