Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

MySQL Tabelle transponieren

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von KonGa, 7 Dezember 2016.

  1. KonGa

    KonGa Neuer Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    da fehlen auf alle Fälle Kommas. Umd zwar in der Select-Liste.
     
  3. KonGa

    KonGa Neuer Benutzer

    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.
     
  4. KonGa

    KonGa Neuer Benutzer

    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.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Zum aggregieren. Ansonsten bekommst Du für jede in Frage kommende Spalte (also die Case - Ausdrücke) auch eine Zeile. Sieht dann doof aus.
     
  6. KonGa

    KonGa Neuer Benutzer

    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!
     
  7. akretschmer

    akretschmer Datenbank-Guru

    Nach dem, was GROUP BY halt definiert.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden