Ankündigung

Einklappen
Keine Ankündigung bisher.

Verlauf "gruppieren"

Einklappen

Neue Werbung 2019

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

  • Verlauf "gruppieren"

    Hallo zusammen,

    ich möchte in einer MySQL-Abfrage gerne folgendes realisieren:

    Ich habe eine Tabelle mit dem Titel "Tore".

    Diese enthält folgende Daten:

    datum, spielerid, spielerkategorie
    2015-05-05, 1, 5
    2015-05-05, 1, 5
    2015-05-05, 1, 5
    2015-05-05, 2, 5
    2015-05-05, 2, 5
    2015-05-06, 1, 5
    2015-05-06, 1, 5
    2015-05-08, 1, 5
    2015-05-08, 2, 5
    Nun möchte ich folgendes herausbekommen:

    datum, spielerid, treffer
    2015-05-05, 1, 3
    2015-05-05, 2, 2
    2015-05-06, 1, 2
    2015-05-08, 1, 1
    2015-05-08, 1, 1
    Das soll also eine Liste werden, welcher Spieler wann wie oft getroffen hat (sortiert nach Datum).

    Meine bisherige Abfrage:

    Code:
    SELECT DATE(o.datum) AS date, c.spielerid FROM daf64_bestia_goals as o LEFT JOIN daf64_bestia_players as p ON o.spieleridid = p.id
    Damit bekomme ich nun eine Liste aller einzelner Treffer und kann die ID der Spieler mit weiteren Details über den Spielern verknüpfen (join). Wie bekomme ich aber das Zählen hin?

  • #2
    Du schreibst, daß Du eine Tabelle hast, aber JOIN'st eine zweite?!
    Was denn nun...
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Schau mal hier: http://www.w3resource.com/sql/aggreg...h-group-by.php
      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


      • #4
        Hi Arne,

        ich habe eine Tabelle und joine eine zweite, um von der Spieler-ID auf den Klarnamen zu kommen.

        Hausl: Ich schaue mir das einmal an, vielen Dank!


        Mein Ergebnis bisher:

        SELECT COUNT(*), DATE(o.datum) AS date, c.spielerid FROM daf64_bestia_goals as o LEFT JOIN daf64_bestia_players as p ON o.spieleridid = p.id GROUP BY date
        Nun erhalte ich folgenden Output:

        COUNT(*), date, spielerid
        5, 2015-05-05, 2
        2, 2015-05-06, 1
        2, 2015-05-08, 1
        Das stimmt so aber noch nicht ganz: Am 05.05. sind zwar 5 Tore gefallen, allerdings nicht alle durch die Spieler-ID 2, sondern 3 Tore von Spieler 1 und 2 von Spieler 2. Eigentlich hätte das Datum also 2x aufgeführt werden müssen.

        Kommentar


        • #5
          Ich habe nun den ganzen Tag gegoogelt und ausprobiert, aber ich habe immer noch das Problem, dass er mir die Datums-Spalte jeweils nur einmal ausgibt, auch wenn 2 Spieler an dem Tag getroffen haben, die eine unterschiedliche ID haben. Er zählt die gesamten Tore der Spieler an dem Tag zwar schön zusammen, aber das hilft mir leider nicht.

          Hat da vlt. noch jemand einen Tipp?

          Vielen Dank und einen schönen Abend euch!

          Kommentar


          • #6
            Code:
            select datum, spielerid, count(1) from tore group by datum, spielerid
            Das Joinen für die Klarnamen überlasse ich Dir zur Übung.

            Das Proble in #4 ist ein Bug in MySQL, der den Syntaxfehler, den Du da hast, nicht erkennt. Die Regel lautet: alle Spalten des Resultates müssen entweder aggregiert oder gruppiert werden. Die Macher von MySQL haben diese Lektion verpeilt und liefern stattdessen ein zufälliges Resultat.

            Sondermüll halt.

            Hoffnung naht: die nächste große Version von MySQL hat diesen Bug wohl nicht mehr. Alternativ kann man schon seit 20 Jahren oder so bessere Software nutzen.
            PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

            Kommentar


            • #7
              Mein Ergebnis bisher:
              Code:
              ... GROUP BY date
              Am 05.05. sind zwar 5 Tore gefallen, allerdings nicht alle durch die Spieler-ID 2, sondern 3 Tore von Spieler 1 und 2 von Spieler 2. Eigentlich hätte das Datum also 2x aufgeführt werden müssen
              Das wäre es auch, wenn du nach datum und spieler gruppiert hättest. Ich dachte der von mit verlinkte Beitrag bringt das genug zur Geltung.
              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


              • #8
                Zitat von hausl Beitrag anzeigen



                Das wäre es auch, wenn du nach datum und spieler gruppiert hättest. Ich dachte der von mit verlinkte Beitrag bringt das genug zur Geltung.

                Das muß man halt etwas genauer erklären ...
                PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                Kommentar


                • #9
                  Hallo zusammen,

                  folgende Anweisung bringt das gewünschte Ergebnis, vielleicht ist es ja für andere, die vor einem ähnlichen Problem stehen (oder dieses über Google zu lösen versuchen) eine Hilfe:

                  Code:
                  SELECT
                      `date`, playerid, COUNT(*) AS `count`
                  FROM
                      your_table
                  GROUP BY
                      `date`, playerid
                  ORDER BY
                      `date`, playerid
                  Mir war schlicht nicht bewusst, dass man nach mehreren Faktoren gruppieren kann.

                  Vielen Dank für eure Hilfe

                  Kommentar


                  • #10
                    Danke für das posten der Lösung!
                    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

                    Lädt...
                    X