Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenausgabe tabellarisch (pivot)

Einklappen

Neue Werbung 2019

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

  • Datenausgabe tabellarisch (pivot)

    Hallo,
    ich habe folgende query:
    Code:
    select userid, rating, game.name from rating, game
    where rating.userid in(1,2,7) and rating.spielid = game.idspiel;
    der mir folgendes ausgibt:
    Code:
    userid | rating | name   
    7      | high   | Tetris
    1      | low    | Mario
    7      | medium | Diablo
    1      | high   | Diablo
    2      | medium | Dota
    7      | high   | Dota
    Jetzt wollte ich wissen ob es möglich ist die Ausgabe in eine der beiden auszugeben.

    Code:
    name   |  1   |  2  | 7       |            oder       userid | Tetris | Mario | Diablo | Dota 
    Tetris |  -   |  -  | high                               1   |   -    |  low  |  high  |   - 
    Mario  | low  |  -  | -                                  2   |   -    |   -   |    -   | medium
    Diablo | high |  -  | medium                             7   |  high  |   -   |    -   | high
    Habe im Forum geschaut und bin auf Pivot mehrmals gestoßen, aber leider könnte ich das nicht umsetzen,
    da die Anzahl der User und die Spiele immer unterschiedlich sein könnte (bei mir).

    Könnte leider kein Beispiel finden was mir das verständlich macht.
    Auf ein Lösungsvorschlag oder Erläuterung wäre ich sehr dankbar.

    MfG c01001.
    Ob eine Sache gelingt, erfährst du nicht, wenn du darüber nachdenkst, sondern wenn du es ausprobierst.

  • #2
    Zitat von c01001 Beitrag anzeigen
    Hallo,
    ich habe folgende query:
    ...
    Auf ein Lösungsvorschlag oder Erläuterung wäre ich sehr dankbar.

    MfG c01001.
    Es gibt Datenbanken, die sowas können. Im Web üblicherweise genutzte DBs können das n.m.W. nicht. Du wirst etwas mit Gruppenwechsel versuchen müssen.

    Kommentar


    • #3
      In diesem Thread wurde das Thema behandelt, allerdings für SQLite.
      https://www.php.de/forum/webentwickl...99#post1513099

      Es hindert Dich keiner daran, die query mit PHP zu erstellen.
      Also User ermitteln und daraus die query bauen, oder Spiele ermitteln und daraus die Query bauen.

      Kommentar


      • #4
        Es gibt Systeme die Pivot beherrschen, jenachdem unterschiedlich benannt. Das klingt nicht schlecht, leider hat es den Haken, dass es genau das was Du suchst dabei blöder Weise nicht gibt. *
        Das SQL Statement ist nicht dynamisch und arbeitet je nach Filter mit unterschiedlichen Daten.

        Wozu dann überhaupt?
        Ja, also was mit den Befehlen ganz gut geht sind statische Pivot, die als Spalten bspw. die Monate des Jahres o.ä. produzieren. Aber "gib mir die nächsten 6 Monate ausgehend vom heutigen Datum" ist schon Essig.
        * Es gibt glaub ich bei besseren Systemen, also Systeme die im SQL JSON oder XML direkt verarbeiten können, die Möglichkeit, die Dynamik über eine Transformation nach JSON/ XML (und zurück) zu erreichen. Hab ich glaub ich schon mal gesehen oder sogar probiert.
        Aber das ist jenachdem auch viel Action für eine Sache, die ich am Ende dann doch wie bereits vorgeschlagen im Client zusammenbauen kann, gemeint ist: Das Statement selbst nach Bedarf zusammensetzen. Dabei muss ich nur sicherstellen, dass keine Injection möglich ist.

        Warum dann trotzdem Pivot vorziehen sollte (Systeme, die Pivot oder vergleichbares können) und keine Group By Case When oder so Workarounds:
        Ein richtiges Pivot Statement wird viel besser optimiert. (Das spielt dann bei größeren Datenmengen schon eine wichtige Rolle)

        Und zuletzt: Es gibt Reporting Frameworks, die Pivot machen. Hab da aber nicht so den Überblick.

        Kommentar


        • #5
          Danke für die Informationen.
          Wieder mal was gelernt.

          MFG und Frohes Neues Jahr,
          c01001.
          Ob eine Sache gelingt, erfährst du nicht, wenn du darüber nachdenkst, sondern wenn du es ausprobierst.

          Kommentar

          Lädt...
          X