2017-03-06 3 views
0

Ich habe eine Datenbank mit Benutzern Tabelle und eine Tabelle Antworten. Jeder Benutzer hat 30 Antworten. Ich möchte einen Benutzer und alle seine Antworten in einer einzelnen Zeile exportieren.Hat viele mysql-Abfrage

z:

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

Ich habe derzeit

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

Diese für jeden Benutzer mit ihrer Antwort gegen jeden eine 30 Zeilen erzeugt. Wie kann ich dies in einer Zeile pro Benutzer mit einer Spalte für jede Antwort gruppieren?

+0

Bitte zeigen Sie uns die Tabellenstruktur für die 'Antworten'-Tabelle. –

+0

Normalisieren Sie Ihr Design. Eine Datenbanktabelle ist KEINE Tabellenkalkulation – Strawberry

+0

@Strawberry Sie sind richtig, aber ich muss dies als eine CSV exportieren, damit ich es dann als eine Tabelle zur Verfügung stellen kann. Deshalb muss es im erforderlichen Format sein – Stretch0

Antwort

2

können Sie versuchen, eine Pivot-Abfrage verwenden, etwa so:

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 

Annahmen: Die answers Tabelle hat eine ID-Spalte zu identifizieren und jede der 30 Antworten Nummerierung. Ohne dies könnte die Abfrage ein echter Schmerz sein. Ich nehme auch an, dass jeder Benutzer genau 30 Antworten hat. Fehlende Antworten würden als NULL angezeigt, wenn sie nicht vorhanden sind.

+0

Das funktioniert perfekt. Vielen Dank – Stretch0