Det finns inget PIVOT-kommando (MySQL pivottabeller (omvandla rader till kolumner) ) i MySQL så att din fråga blir statisk för storlek. Det är därför det är bättre att skjuta upp detta i ansökan.
Tänkte att om du bara har ändlig och liten domän för storlekskolumnen så kan du använda följande fråga jag postade nedan:
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)
Som du kan se i IF-förhållanden använder jag värde av storlek, det är vad jag menar att frågan är statisk. Jag antar att alla möjliga storlekar kan vara antingen 32, 34, 36, 38.
Arbetsdemo @SQL-fiol
Redigera:Som jag säger från början Om storleksvärdena är okända eller domänen är stor så är det bättre att du skjuter upp pivotarbetet i ditt serverskript (t.ex. PHP) ändå kan du använda följande fråga för att bearbeta i skriptet:
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`
Se hur det fungerar @SQL-fiol .