Disons que j'ai trois tables MySQL différentes :
Table products
:
id | name
1 Product A
2 Product B
Table partners
:
id | name
1 Partenaire A
2 Partenaire B
Table sales
:
partners_id | products_id
1 2
2 5
1 5
1 3
1 4
1 5
2 2
2 4
2 3
1 1
J'aimerais obtenir un tableau avec les partenaires dans les lignes et les produits en tant que colonnes. Jusqu'à présent, j'ai pu obtenir une sortie comme ceci :
name | name | COUNT( * )
Partenaire A Product A 1
Partenaire A Product B 1
Partenaire A Product C 1
Partenaire A Product D 1
Partenaire A Product E 2
Partenaire B Product B 1
Partenaire B Product C 1
Partenaire B Product D 1
Partenaire B Product E 1
En utilisant cette requête :
SELECT partners.name, products.name, COUNT( * )
FROM sales
JOIN products ON sales.products_id = products.id
JOIN partners ON sales.partners_id = partners.id
GROUP BY sales.partners_id, sales.products_id
LIMIT 0 , 30
mais j'aimerais plutôt obtenir quelque chose comme :
nom_partenaire | Product A | Product B | Product C | Product D | Product E
Partenaire A 1 1 1 1 2
Partenaire B 0 1 1 1 1
Le problème est que je ne peux pas savoir combien de produits j'aurai donc le nombre de colonnes doit changer dynamiquement en fonction des lignes dans la table des produits.
Cette très bonne réponse ne semble pas fonctionner avec mysql : T-SQL Pivot? Possibility of creating table columns from row values