Ankündigung

Einklappen
Keine Ankündigung bisher.

Besten Spieler ermitteln mit Punkten

Einklappen

Neue Werbung 2019

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

  • Besten Spieler ermitteln mit Punkten

    Moin zusammen,

    ich stehe anscheinend mal wieder auf dem schlauch.
    Ich würde gerne aus einer Datenbank eine Platzierung aufstellen, welcher Spieler nun Platz 1-5 ist.
    (Gerne auch bei gleicher Punktezahl bspw. P1,P2,P2,P3,P3)

    Meine Datenbank hat die Tabelle "spiele" und die spalten "id, spieler1, spieler2, spieler3, spieler4, spieler5, punkte1, punkte2, punkte3, punkte4, punkte5"
    Nehmen wir mal an da steht jetzt folgendes drin (1, test1, test2, test3, '', '', 10, 12, 10, '', '') //weil halt nur 3 Spieler gespielt haben
    oder
    (1, test1, test2, test3, test4, test5, 10, 12, 10, 0, 9) //weil halt 5 Spieler gespielt haben

    Nun möchte ich angezeigt bekommen:
    Platz 1 ist test2 mit 12 Punkten
    Platz 2 ist test1 mit 10 Punkten
    Platz 2 ist test3 mit 10 Punkten

    oder halt

    Platz 1 ist test2 mit 12 Punkten
    Platz 2 ist test1 mit 10 Punkten
    Platz 2 ist test3 mit 10 Punkten
    Platz 3 ist test5 mit 9 Punkten
    Platz 4 ist test4 mit 0 Punkten

    Wie sortiere ich das?
    Einfach mit "SORT BY punkte1, punkte2, punkte3, punkte4, punkte5" geht ja nicht.

    Wie ich das machen würde, wenn die Spieler einzeln untereinander stehen (bspw.: id, spieler, punkte) ist selbstverständlich.
    Dort geht es ja mit "SELECT * FROM bsp SORT BY punkte" beispielsweise. Aber das ist ja nicht das, was ich brauche. :/

  • #2
    Das hier
    Meine Datenbank hat die Tabelle "spiele" und die spalten "id, spieler1, spieler2, spieler3, spieler4, spieler5, punkte1, punkte2, punkte3, punkte4, punkte5"
    deutet auf ein falsches Datenbankdesign hin. Auf der Basis ist eine gute Lösung kaum möglich.

    Kommentar


    • #3
      Ja wenn dein Tabellendesign kaputt ist musst du halt tricksen

      Code:
      select unnest(array[spieler1,spieler2, ...], array[punkte1, punkte2, ...])
      https://www.postgresql.org/docs/11/functions-array.html

      etc. dann kannst du auch sortieren. Durchnummerierte Spalten deuten aber immer darauf hin, dass du Murks gemacht hast, die Daten gehören in eine zweite Tabelle mit Foreignkey.

      Kommentar


      • #4
        Zitat von PlatinSecurity Beitrag anzeigen
        Wie sortiere ich das?
        Einfach mit "SORT BY punkte1, punkte2, punkte3, punkte4, punkte5" geht ja nicht.

        Wie ich das machen würde, wenn die Spieler einzeln untereinander stehen (bspw.: id, spieler, punkte) ist selbstverständlich.
        Dort geht es ja mit "SELECT * FROM bsp SORT BY punkte" beispielsweise. Aber das ist ja nicht das, was ich brauche. :/
        Was du brauchst ist Normalisierung deiner Daten.

        Kommentar

        Lädt...
        X