MySQL Tabelle transponieren

KonGa

Neuer Benutzer
Beiträge
4
Hallo zusammen,

ich bekomme über ein Formular in WordPress Daten in eine Datenbank geschrieben aus einer Umfrage. Nun sind die Daten in ein Format welches ich nicht zum Auswerten nutzen kann und möchte die Daten transponiert in einem View darstellen. Bisher sieht die Tabelle so aus:

|submit_time|form_name|field_name|field_value|field_order|

field_name enthält die Bezeichnung für jedes Formularfeld. field_value den entsprechenden Wert. Nun möchte ich für jedes Formularfeld eine Spalte haben.

Ich hab verschiedene Ideen gefunden aber keine Funktioniert und ich weiß nicht warum:

SELECT`submit_time` AS `Submitted`
GROUP_CONCAT(CASE WHEN `field_name` = 'your-name' THEN `field_value` END) AS `name`,
GROUP_CONCAT(CASE WHEN `field_name` = 'your-company' THEN `field_value` END) AS `company`,
FROM `table`
WHERE `form_name` = "Formularname"
GROUP BY `submit_time`

geht nicht, anscheinend kennt das PHPMyAdmin das GROUP_CONCAT nicht, wird auch nicht farblich hervorgehoben im Editor. Ohne die beiden Zeilen funktioniert die Abfrage, allerdings wird dann eben nur die submit_time ausgegeben.

ODER:

SELECT`submit_time` AS `Submitted`
MAX(CASE WHEN `field_name` = 'your-name' THEN `field_value` END) AS name,
MAX(CASE WHEN `field_name` = 'your-company' THEN `field_value` END) AS company,
FROM `table`
WHERE `form_name` = "DRI"
GROUP BY `submit_time`

das wurde auch in einem Forum vorgeschlagen, wobei ich nicht verstehe welche Funktion das MAX() hier überhaupt habe soll.

Habe es auchmal mit IF statt CASE versucht, ohne Erfolg. Also ich weiß der Fehler liegt in der Aggregation der Daten, aber ich weiß nicht wie ich das machen soll. Kann mir da jemand helfen?

Ziel ist eben:

|submit_time|name|company|industry|frage1|frage2|frage3|.....|frageXX

Ich will die Daten danach exportieren um sie forerstmal in Excel auszuwerten. In Zukunft, soll die Auswertung dann auf dem Server passieren, dafür würde ich aber zu lange brauchen mit meinen minimalen PHP skills ;P

Vielleicht wäre es auch besser die Daten so zu lassen wie sie sind und direkt irgendwie zu verwerten, aber mir scheint das transponiert einfach eine bessere Darstellung und Lösung, was meint Ihr?

Vielen Dank im Vorraus!
Konstatin
 
Werbung:
Okay, das war leichtsinning. Aber hab jetzt nur ein fehlendes Komma gefunden, nach `Submitted`... oder?

Stimmt es jetzt?

SELECT`submit_time` AS `Submitted`,
GROUP_CONCAT(CASE WHEN `field_name` = 'your-name' THEN `field_value` END) AS `name`,
GROUP_CONCAT(CASE WHEN `field_name` = 'your-company' THEN `field_value` END) AS `company`,
FROM `table`
WHERE `form_name` = "DRI"
GROUP BY `submit_time`

Falls ja, das war wohl nicht der einzige Fehler ;P.
 
Es war wirklich das Komma... danke dir!..

Mit der MAX Funktion hats geklappt.. Allerdings muss ich sagen, verstehe ich immernoch welche Funktion die hier jetzt überhaupt hat.
 
Okay, aber nach welchen kriterien aggregiert er hier? Ich dachte das MAX() die Zahl mit dem höchsten Wert.
Ich teste es mal ohne MAX() und schau was bei raus kommt.

Danke dir für deine Hilfe!
 
Werbung:
Zurück
Oben