Spalten Gruppieren aus einer Tabelle

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

  • Spalten Gruppieren aus einer Tabelle

    Tut mir leid euch wieder zu bemühen.
    Ich hab folgende Datensätze:

    Daten in der Tabelle ergebnisse:
    sp_id / team_a / team_b / erg_1 /erg_2 / spieltag
    1 / Karl / Nette / 3 / 0 / 2013-03-19 15:00:00
    2 / Micha / Nette / 2 / 0 / 2013-03-20 00:00:00
    3 / Micha / Karl / 3 / 0 / 2013-03-21 00:00:00
    4 / Nette / Peter / (NULL) / (NULL) / 0000-00-00 00:00:00

    Nun möchte ich gerne folgendes Ergebnis (ORDER BY kenn ich):
    Zu jedem Namen seine Spielpaarung. ZB:

    sp_id/Spieler/Gegner/erg_1/erg_2/ spieltag
    1 / Karl / Nette / 3 / 0 / 2013-03-19 15:00:00
    3 / Karl / Micha / 0 / 3 / 2013-03-21 00:00:00
    3 / Micha / Karl / 0 / 3 / 2013-03-21 00:00:00
    2 / Micha / Nette / 2 / 0 / 2013-03-20 00:00:00
    (usw)

    Mir geht es nur um die DB-Abfrage. Die Ausgabe mit den - und : mache ich in der Präsentationsschicht (Dank an hll3)

    Mir ist bewusst das es für euch Profis leicht ist, aber ich beginne erst mit MYSQL und meine Versuche mit zB DISTINCT liefen ins Leere.
    Zuletzt geändert von Wasser_Wanderer; 31.03.2013, 20:02. Grund: Soll Ergebnis geändert ( / als Spaltentrenner )

  • #2
    Hi Wasser_Wanderer,

    vielleicht mit concat?

    Code:
    select sp_id, concat(team_a , ' - ', team_b) as Teams, concat(erg_1, ' : ', erg_2) as Ergebnis, spieltag from . . .
    Gruß
    Günni

    Kommentar


    • #3
      Hallo Guenni und vielen Dank für deine Antwort:

      Zitat von Guenni61 Beitrag anzeigen
      Hi Wasser_Wanderer,

      vielleicht mit concat?

      Code:
      select sp_id, concat(team_a , ' - ', team_b) as Teams, concat(erg_1, ' : ', erg_2) as Ergebnis, spieltag from . . .
      Gruß
      Günni
      Leider bekomme ich nicht das gewünsche Ergebnis.
      Sondern:
      sp_id / Teams / Ergebnis / spieltag
      1 Karl - Nette / 3 : 0 / 2013-03-19 15:00:00
      2 Micha - Nette / 2 : 3 / 2013-03-20 00:00:00
      3 Micha - Karl / 3 : 0 / 2013-03-21 00:00:00
      4 Nette - Peter / (leer) : (leer) / 0000-00-00 00:00:00
      5 I<Tess>I - Karl / (leer) : (leer) / 0000-00-00 00:00:00
      6 Nette - Micha / (leer) : (leer) / (leer)
      7 Willi - Nette / (leer) : (leer) / (leer)

      Bitte stört euch nicht an dem (leer). Das ist nebensächlich.

      Kommentar


      • #4
        Hi Wasser_Wanderer,

        was stimmt denn im Ergebnis nicht? Ich hab' mir keine Tabelle mit deinen Daten angelegt,

        sondern einfach eine vorhandene genommen, und vielleicht deshalb den Fehler nicht bemerkt.

        Gruß
        Günni

        Kommentar


        • #5
          Hallöchen Günni,
          als Ergebnis möchte ich:

          Zu jedem Namen seine Spielpaarung. ZB:

          sp_id / Spieler / Gegner / erg_1/ erg_2 / spieltag
          1 / Karl / Nette / 3 / 0 / 2013-03-19 15:00:00
          3 / Karl / Micha / 0 / 3 / 2013-03-21 00:00:00
          3 / Micha / Karl / 0 / 3 / 2013-03-21 00:00:00
          2 / Micha / Nette / 2 / 0 / 2013-03-20 00:00:00
          (usw)

          ORDER BY: Spieler

          Ich denke das müsste mit einem SUB-SELCT gemacht werden, aber da bin ich mir echt nicht sicher.
          Ich google schon seit 5 Tagen nach: mysql group by 2 Spalten (und noch andere Varianten ) ;(

          Kommentar


          • #6
            Hi Wasser_Wanderer,

            jetzt verstehe ich, was du meinst (Glaub' ich zumindest). Das würde bedeuten das aus . . .

            karl/berta/3/2
            micha/anton/1/3

            . . . folgendes wird . . .
            anton/micha/3/1
            berta/karl/2/3

            . . . so wie im Eingangspost beschrieben. Dann müssen aber auch die Ergebnisse "gedreht" werden, so dass sie zu den sortierten Paarungen passen.

            Mein Vorschlag:

            - Eine Tabelle mit den Teams(oder Spielern)
            id/team(spieler)

            - Eine weitere Tabelle mit den Paarungen
            id/team1_id/team2_id/p1/p2

            team1_id, team2_id bekommen jeweils eine id aus der Tabelle team. p1/p2 sind die Ergebnisse.

            Folgender select . . .
            PHP-Code:
            SELECT ergebnisse.idt1.teamt2.teamp1p2 from teams t1teams t2ergebnisse 
            where t1
            .id=ergebnisse.team1_id and t2.id=ergebnisse.team2_id order by t1.team 
            . . . liefert dann (hoffentlich) das gewünschte Ergebnis.

            Gruß
            Günni

            Kommentar


            • #7
              Hallo Günni. Danke das du dich reinhängst.

              Leider liefert dein letzter Vorschlag auch nicht das gewünschte Ergebnis.

              Ich habe (so wie von dir vorgeschlagen) 2 Tabellen angelegt:

              Tabelle: teams
              id/team
              1/Karl
              2/Willi
              3/Micha
              4/Hans

              Tabelle: spiele
              id/team1_id/team2_id/p1/p2
              1 / 1 / 2 / 2 / 0
              2 / 2 / 3 / 2 / 1
              3 / 1 / 3 / 2 / 0
              4 / 4 / 3 / 1 / 2

              Deine Abfrage ergibt:
              id/team/team/p1/p2

              4/Hans/Micha/1/2
              1/Karl/Willi/2/0
              3/Karl/Micha/2/0
              2/Willi/Micha/2/1

              Das Ergebnis soll aber sein:
              spiel_id/team/team/p1/p2

              4/Hans/Micha/1/2

              1/Karl/Willi/2/0
              3/Karl/Micha/2/0

              4/Micha/Hans/2/1
              3/Micha/Karl/0/2
              2/Micha/Willi/1/2

              2/Willi/Micha/2/1

              Also erst: Alle Paarungen von Hans (es gab nur eine)
              Dann: Alle Paarungen von Karl (es gab zwei)
              Dann: Alle Paarungen von Micha (es gab drei)
              Dann: Alle Paarungen von Willi (es gab nur eine)

              Sorry wenn ich das Anfangs schlecht beschrieben hatte.

              Kommentar


              • #8
                Habs hin bekommen

                Das Ergbniss sollte sein:
                team / gegner / tore / gegentore / tordiff / datum
                Karl / Micha / 0 / 3 / -3 / 2013-03-21 00:00:00
                Karl / Nette / 3 / 0 / 3 / 2013-03-19 15:00:00
                Micha / Nette
                Micha / Nette / 2 / 3 / -1 / 2013-03-20 00:00:00
                Micha / Karl / 3 / 0 / 3 / 2013-03-21 00:00:00
                Nette / Peter
                Nette / Willi
                Nette / Micha
                Nette / Karl / 0 / 3 / -3 / 2013-03-19 15:00:00
                Nette / Micha / 3 / 2 / 1 / 2013-03-20 00:00:00
                Peter / Nette
                Willi / Nette

                Mit:
                PHP-Code:
                SELECT 
                team_a 
                AS team,team_b AS gegner
                erg_1 AS tore
                erg_2 AS gegentore
                erg_1 erg_2 AS tordiff
                spieltag AS datum 
                FROM 
                ergebnisse 
                UNION ALL 
                SELECT 
                team_b 
                AS team
                team_a AS gegner
                erg_2 AS tore
                erg_1 AS gegentore
                erg_2 erg_1 AS tordiff
                spieltag AS datum 
                FROM 
                ergebnisse     
                ORDER BY 
                team ASC
                ,tore ASCdatum ASC 
                Das ich da erstmal keine Tabelle team gebaut habe, erkläre ich nur mit dem Begriff: schnell was basteln

                Tabelle team kommt noch mit den id,s dazu. Ich wollte nur die Einzelergebnisse haben.

                Und das ist mir alter Sack auch endlich gelungen

                Kommentar

                Lädt...
                X