Ankündigung

Einklappen
Keine Ankündigung bisher.

SQL-Abfrage mit JOIN und SUM?

Einklappen

Neue Werbung 2019

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

  • SQL-Abfrage mit JOIN und SUM?

    Hallo zusammen

    Ich bin aus der älteren Generation und habe mir aus Spaß für eine lokal laufende Webseite versucht PHP/SQL beizubringen.

    Bislang kam ich gut zurecht, aber nun bin ich leider mit meinem Latein am Ende und finde keine Lösung für mein Problem (welches vermutlich nicht schwer zu lösen ist - ich bin vermutlich zu alt dafür...)

    Ich habe in einer Datenbank zwei Tabellen:

    Tabelle Spieler:
    Spielernameid Nachname Vorname
    1 Müller Heinz
    2 Meier Udo
    3 Schmidt Jürgen
    Tabelle Statistiken:
    Spielerid Spiele
    1 10
    2 3
    3 8
    2 4
    3 6
    1 1
    2 2
    3 2
    3 5
    Nun möchte ich in einer Abfrage (sofern das möglich ist) folgendes Ergebnis in PHP ausgeben
    Nachname Vorname Spiele
    Schmidt Jürgen 21
    Müller Heinz 11
    Meier Udo 9
    Ich bin kein gelernter ITler - versuche nur in der Rente ein wenig dazuzulernen/frisch zu bleiben und getraue mich auch nicht diese Webseite zu veröffentlichen, weil der Code sicher schrecklich ist - die Seite würde vermutlich sehr schnell gehackt werden.

    Ich bitte nur um Hilfe, damit ich meiner privaten Statistiken auch auswerten kann.

    Tausend Dank

  • #2
    scheinst doch auf dem richtigenm weg, versuch doch mal was ...
    und poste

    Kommentar


    • #3
      Das war mein Versuch...

      Code:
      SELECT a.id, s.spiele, s.spielerid, a.name, b.vorname, spielerid, sum(spiele) AS summe from stats s LEFT JOIN spieler a on (s.spielerid=a.id) LEFT JOIN spieler b on (s.spielerid=b.id) GROUP BY spielerid ORDER BY summe DESC";

      Kommentar


      • #4
        Also, wenn du Partien zwischen 2 Spielern abbilden willst, brauchst du noch eine weitere Tabelle... in der Art id, spieler1, spieler2, ergebnis
        So macht der zweite JOIN (b) keinen Sinn, weil identisch mit dem ersten JOIN (a).

        Der Rest sieht korrekt aus, wenn du nur die Summe der Spiele je Spieler haben willst...den zweiten JOIN kannst rausschmeissen, der ist unnötig dafür.

        GROUP BY spielerid und auch SUM(spiele) wird einen "ambigous" Fehler erzeugen, weil die Felder in a und b auftauchen.
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          SELECT Vorname, Nachname, SUM(Spiele) AS Spiele FROM Statistiken LEFT JOIN Spieler ON (Spielernameid = Spielerid) GROUP BY Spielerid, Vorname, Nachname

          Abhängig von dem sql_mode der Datenbank (full_group_by oder nicht) genügt auch ein GROUP BY Spielerid

          Was passiert hier?

          Zunächst joinen wir zu jedem eintrag aus der statistik den passenden spieler dazu.

          Aus dem kombinierten ergebnis nehmen wir dann den Vornamen, den Nachnamen und die summe der spiele, die wir aber wieder für das Ergebnis einfach nur in Spiele umbenennen. Die GROUP BY klausel sogt dafür, dass die einzelnen zeilen gruppiert werden nach Spielerid sodass die Summe sich einzeln auf jede dieser gruppen bezieht und nicht auf alles

          Kommentar


          • #6
            Danke für euer schubsen - manchmal sitzt man einfach zu lange an einem Thema um am nächsten Tag die Lösung zu finden...

            $sql="SELECT spiele, spielerid, a.name, a.vorname, a.spielernameid, sum(spiele) AS summe from stats LEFT JOIN spieler a on (spielerid=a.spielernameid) GROUP BY spielerid ORDER BY summe DESC";

            Kommentar

            Lädt...
            X