2017-05-01 61 views
1

我有一個看起來是這樣的(多個列參與)MYSQL,動態行

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

表的產品,看起來像這樣

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

和一張桌子u_p表用戶列這是指產品允許用戶使用

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

其中u_p_user和u_p_prod是外鍵user_id resp。 PRODUCT_ID。

我想是這樣的:

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   | 

用戶和產品必須是動態的,偏離航向。

這怎麼能在mySQL中完成?

回答

2

這通常被稱爲支點。如果沒有爲每個不同的值編寫一列,就沒有辦法進行數據透視。這意味着您需要知道在編寫SQL查詢之前之前的一組不同的值

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;