Der er ingen PIVOT-kommando (MySQL pivottabeller (omdan rækker til kolonner) ) i MySQL, så din forespørgsel vil være statisk for størrelse. Derfor er det bedre at udsætte dette i ansøgningen.
Tænkte, at hvis du kun har et begrænset og lille domæne til størrelseskolonne, så kan du bruge følgende forespørgsel, jeg postede nedenfor:
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-forhold, bruger jeg værdi af størrelse, det er det, jeg mener, spørgsmålet er statisk. Jeg antager, at alle mulige størrelser kan være enten 32, 34, 36, 38.
Working demo @SQL Fiddle
Rediger:Som jeg siger fra start Hvis størrelsesværdier er ukendte, eller domænet er stort, så er det bedre, at du udsætter pivotarbejde i dit serverscript (f.eks. PHP), men du kan stadig bruge følgende forespørgsel til at behandle i scriptet:
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, hvordan det virker @SQL-violin .