2017-05-01 6 views
1

ich eine Tabelle Benutzer, die (beteiligten sich mehr Spalten) etwa wie folgt aussiehtMYSQL, dynamische Zeilen in Spalten

user_id | user_name | 
1  | adam | 
2  | berta | 
3  | caesar | 

eine Tabelle Produkt, das u_p so etwas wie dieses

product_id | product_name | 
1   | product 1 | 
2   | product 2 | 
3   | product 3 | 
4   | product 4 | 

und einem Tisch sieht bezieht sich auf die Produkte ein Benutzer erlaubt ist

u_p_id | u_p_user | u_p_prod | 
1  | 1  | 1  | 
2  | 1  | 2  | 
3  | 2  | 3  | 

zu verwenden, wo u_p_user u_p_prod und die Fremdschlüssel sind user_id bzw. Produkt ID.

Was ich will, ist dies:

user_id | user_name | u_p_prod=1 | u_p_prod=2 | u_p_prod=3 | u_p_prod=4 | 
1  | adam | 1   | 1   | 0   | 0   | 
2  | berta | 0   | 0   | 1   | 0   | 
3  | caesar | 0   | 0   | 0   | 0   | 

Benutzer und Produkte haben, dynamisch sein, vom Kurs abgekommen.

Wie kann dies in mySQL getan werden?

Antwort

2

Dies wird oft als Pivot bezeichnet. Es gibt keine Möglichkeit, einen Drehpunkt zu erstellen, ohne eine Spalte pro eindeutigem Wert fest zu codieren. Dies bedeutet, dass Sie die Menge der verschiedenen Werte kennen müssen vor Sie schreiben die SQL-Abfrage.

SELECT u.user_id, u.user_name, 
    COALESCE(MAX(IF(u_p.prod=1, 1, 0), 0) AS `u_p_prod=1`, 
    COALESCE(MAX(IF(u_p.prod=2, 1, 0), 0) AS `u_p_prod=2`, 
    COALESCE(MAX(IF(u_p.prod=3, 1, 0), 0) AS `u_p_prod=3`, 
    COALESCE(MAX(IF(u_p.prod=4, 1, 0), 0) AS `u_p_prod=4` 
FROM user AS u 
LEFT OUTER JOIN u_p ON u.user_id = u_p.u_p_user 
GROUP BY u.user_id;