2017-03-06 3 views
0

私はDBテーブルと回答テーブルを持っています。各ユーザーには30の回答があります。私は、ユーザーとその回答をすべて1つの行にエクスポートしたい。多くのmysqlクエリを持っています

例えば:

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

私は現在、これは各1に対する彼らの答えを持つ各ユーザーの30行を作成します

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

を持っています。これを1人のユーザーごとに1つの行にグループ化して、回答ごとに列を作成するにはどうすればよいですか?

+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表は30件の各回答を識別し、ナンバリングidカラムを持っています。これがなければ、クエリは本当の痛みになる可能性があります。私はまた、各ユーザーが正確に30の答えを持つと仮定します。見つからない回答は、存在しない場合はNULLと表示されます。

+0

それは完全に動作します。ありがとう – Stretch0

関連する問題