Er is geen PIVOT-opdracht (MySQL draaitabellen (transformeer rijen naar kolommen) ) in MySQL, dus uw zoekopdracht zal statisch zijn voor grootte. Daarom is het beter om dit in de aanvraag uit te stellen.
Dacht dat als je slechts een eindig en klein domein hebt voor de kolomgrootte, je de volgende query kunt gebruiken die ik hieronder heb gepost:
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)
Zoals je kunt zien in IF-voorwaarden, gebruik ik de waarde van de grootte, dat is wat ik bedoel, de vraag is statisch. Ik neem aan dat alle mogelijke maten 32, 34, 36, 38 kunnen zijn.
Werkende demo @SQL Fiddle
Bewerken:zoals ik al zei vanaf het begin. Als de groottewaarden onbekend zijn of het domein groot is, is het beter dat u het draaiwerk binnen uw serverscript (bijv. PHP) uitstelt, maar u kunt de volgende query gebruiken om in het script te verwerken:
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`
Kijk hoe het werkt @SQL fiddle .