有很多mysql查询

问题描述:

我有一个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

您可以尝试使用枢轴查询,像这样:

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