Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL Count über mehrere Spalten

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MySQL Count über mehrere Spalten

    Hallo zusammen,

    ich bin noch relativ neu im Datenbanken-Business... Stehe aber gerade vor einem Problem, wo ich auf dem Schlauch stehe.
    Dazu möchte ich eine MySQL Tabelle ausgeben, in der die Anzahl der gleichen Antworten gezählt (Count(*)) als Variable gespeichert werden.
    frage1 frage2 frage3 frage4
    1a 2a 3a 4a
    1b 2b 3b 4b
    1c 2c 3c 4c
    1a 2a 3a 4a
    Das ganze habe ich versucht mit einem UNION auszugeben, klappt aber nicht ganz wie erwartet.

    PHP-Code:
    $query sprintf("SELECT frage1, COUNT(*) as Anzahl1 FROM Quiz GROUP BY frage1        
                        UNION SELECT frage2, COUNT(*) as Anzahl2 FROM Quiz Group BY frage2
                        UNION SELECT frage3, COUNT(*) as Anzahl3 FROM Quiz Group BY frage3
                        UNION SELECT frage4, COUNT(*) as Anzahl4 FROM Quiz Group BY frage4
                        "
    ); 
    Ausgabe:

    [{"frage1":"1a","Anzahl1":"2"},{"frage1":"1b","Anza hl1":"1"},{"frage1":"1c","Anzahl1":"1"},{"frage1" : "1d","Anzahl1":"1"},
    {"frage1":"2a","Anzahl1":"2"},{"frage1":"2b","Anza hl1":"1"},{"frage1":"2c","Anzahl1":"1"},{"frage1" : "2d","Anzahl1":"1"},
    {"frage1":"3a","Anzahl1":"2"},{"frage1":"3b","Anza hl1":"1"},{"frage1":"3c","Anzahl1":"1"},{"frage1" : "3d","Anzahl1":"1"},
    {"frage1":"4a","Anzahl1":"2"},{"frage1":"4b","Anza hl1":"1"},{"frage1":"4c","Anzahl1":"1"},{"frage1" : "4d","Anzahl1":"1"}]

    Rauskommen soll aber:

    [{"frage1":"1a","Anzahl1":"2"},{"frage1":"1b","Anza hl1":"1"},{"frage1":"1c","Anzahl1":"1"},{"frage1" : "1d","Anzahl1":"1"},
    {"frage2":"2a","Anzahl2":"2"},{"frage2":"2b","Anza hl2":"1"},{"frage2":"2c","Anzahl2":"1"},{"frage2" : "2d","Anzahl2":"1"},
    {"frage3":"3a","Anzahl3":"2"},{"frage3":"3b","Anza hl3":"1"},{"frage3":"3c","Anzahl3":"1"},{"frage3" : "3d","Anzahl3":"1"},
    {"frage4":"4a","Anzahl4":"2"},{"frage4":"4b","Anza hl4":"1"},{"frage4":"4c","Anzahl4":"1"},{"frage4" : "4d","Anzahl4":"1"}]

    Hat jemand eine Idee, wie ich das Problem lösen kann? :/

    Vielen Dank!

  • #2
    Durchnummerierte Feldnamen deuten zu 99% auf ein falsches Design der Datenbank hin. Normalisiere deine Datenbank dann hast du das Problem auch nicht mehr.
    Überblick zu den Normalformen hier.

    Kommentar


    • #3
      Ok ein umdesign wäre noch möglich. Was kannst du denn empfehlen, lieber mehrere Tabellen, quasi jede Spalte eine neue Tabelle oder doch nur eine Tabelle aber auch nur mit einer Spalte, wo dann alles reinkommt. Die Inhalte kommen über Radio - Buttons aus einem Formular.

      ​​​​​​Wie gesagt, am Ende will ich jede Antwort also alle "1a" etc. mit einer Variablen ansprechen können.
      Aufwendige joins wollte ich eig vermeiden...
      ​​​​

      Kommentar


      • #4
        Aufwendige joins wollte ich eig vermeiden...
        Nutze eine DB wozu sie da ist. Lies das mal durch: http://www.sqldocu.com/nine/normalform1.htm

        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Eine Tabelle für die Fragen, eine Tabelle für die User (welche die Fragen beantworten) und eine Tabelle, welche die Antworten für jede Frage für jeden User abspeichern. Wenn du wirklich nur wissen musst ob die Antwort a), b), etc. ist dürfte das reichen.

          Also:
          User:
          id username
          1 peter
          2 hans
          Fragen:
          id Frage
          1 Frage 1
          2 Frage 2
          Fragen_Antworten (wenn derselbe User mehrmals beantworten soll brauchts noch eine id-Spalte, ansonsten sind user und frage pk)
          user frage antwort
          1 1 a
          1 2 b
          2 1 d
          Dann brauchst du nicht mal einen Join wenn du nur die Anzahl wissen willst.

          Kommentar

          Lädt...
          X