2017-03-06 64 views
0

我有一個DB用戶表和答案表。每個用戶有30個答案。我想導出一個用戶和他們所有的答案在一行上。有很多mysql查詢

e.g:

ID | email | answer_1 | answer_2 | answer_3 | etc... 
----|---------|----------|----------|----------|-------- 
1 | [email protected] | foo  | bar  | baz  | .... 

我現在有

SELECT * 
    FROM users 
    LEFT JOIN answers AS A 
     ON users.id = A.user_id 
    WHERE email IS NOT NULL 

這與他們對每一個答案的每個用戶創建一個30行。如何將每個用戶的這一行分組爲一列,併爲每個答案填充一列?

+0

請向我們展示'answers'表的表結構。 –

+0

正常化您的設計。數據庫表格不是電子表格 – Strawberry

+0

@Strawberry您是正確的,但我需要將其導出爲CSV格式,然後將其作爲電子表格提供。因此爲什麼它需要採用所需的格式 – Stretch0

回答

2

您可以嘗試使用樞軸查詢,像這樣:

SELECT uid, email, 
     MAX(CASE WHEN a.aid = 1 THEN a.answer END) AS answer_1, 
     MAX(CASE WHEN a.aid = 2 THEN a.answer END) AS answer_2, 
     MAX(CASE WHEN a.aid = 3 THEN a.answer END) AS answer_3 
     -- add more CASE expressions to cover all 30 answers 
FROM users u 
LEFT JOIN answers a 
    ON u.id = a.user_id 
WHERE u.email IS NOT NULL 
GROUP BY u.id, u.email 

假設:answers表有一個ID列標識和編號各30個答案。沒有這個,查詢可能是一個真正的痛苦。我還假設每個用戶都有30個答案。如果它們不存在,缺少答案將顯示爲NULL

+0

完美的作品。謝謝 – Stretch0