Ranking

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

  • Ranking

    Hi,
    ich hoffe ihr könnt mir weiterhelfen.

    Habe in einere Datenbank eine Tabelle mit Vereinen und eine mit den einzelnen Spielen der Veiene gegeneinander.
    Wie kann ich nun aus den beiden Tabellen eine "Tabelle" also ein Ranking generieren?

    Die Tabellen sind wie folgt aufgebaut:

    Tabelle Verein
    ID
    Verein

    Tabelle Spiele
    ID
    ID_Heimmannschaft
    ID_Gastmannschaft
    Tore_Heimmannschaft
    Tore_Gastmannschaft

    Hat einer ne Idee wie ich nun am besten an einer Tabelle (Ranking) komme (3 Pkt für Sieg, 1 Pkt für Unendschieden)?

    Evt. noch bei Puktegleichheit direkter Vergleich, also das Ergebnis der beiden Teams gegeneinander???

    Ich hatte zwar schon die Idee bei Anlegen der Spielergebnisse die Punkte der einzelnen Teams in einer Weiteren Tabelle zu speichern, doch gefällt mir diese Idee auf Grund der mangelnden Flexibilität nicht. So könnte man z.B. sich nachträglich nicht mehr den Tabellenstand nach dem 3. Spieltag anschauen.

    Ich hoffe ihr habt ne Idee für mich

  • #2
    dann solltest du erstmal eine spalte für den spieltag einbauen

    danach beschäftigst du dichmit JOINs, probierst selbständig etwas und bei fragen kommst du wieder und sagst uns was du versucht hast, was rausgekommen ist und was rauskommen sollte
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Ok,
      da man hier scheinbar auf dem "Hilf dir selber"-Trip ist, habe ich dieses nun auch versucht und hoffe jetzt eure Güte zu bekommen...

      Naja, dann mal los
      Also die Spalte Spieltag ist drin.
      Die Problematik dürfte bekannt sein (s.o.)

      Nach dem ich so einiges Joins ausprobiert habe hier einer der es schon mal in die Richting gebracht hat:

      Code:
       select Name,
      sum(h.tore_heim) as Heimtore, sum(h.tore_gast) as Heimgegentore, sum(g.tore_gast) as Auswaertstore,
      sum(g.tore_heim) as Auswaertsgegentore,
      count(sh.key_Spiele) as AnzahlHeimsiege,
      count(ng.key_Spiele) as AnzahlAuswaertsniederlagen
      from Verein V
      left outer join Spiele h on h.key_Clubheim = V.key_verein and h.key_Spieltyp =1
      left outer join Spiele g on g.key_Clubgast = V.key_verein and g.key_Spieltyp =1
      left outer join Spiele sh on sh.tore_heim > sh.tore_gast and sh.key_Clubheim = V.key_verein and sh.key_Spieltyp =1
      left outer join Spiele ng on ng.tore_heim > ng.tore_gast and ng.key_Clubgast = V.key_verein and ng.key_Spieltyp =1
      where (V.key_Verein = h.key_Clubheim or V.key_Verein = g.key_Clubgast)
      group by V.name
      having (count(h.key_spiele) > 0 or count(g.key_Spiele) > 0)
      Raus bekomme ich eine Lister der Vereine doch leider mit der jeweilige Gesamtzahl an Toren, Gegentore, Siegen, Niederlagen der gesamten Liga statt der einzelnen Vereine.

      Ich hoffe ihr habt einen guten Tipp für mich

      Kommentar


      • #4
        Code:
        SELECT
          v.name,
          SUM(h.tore_heim) heimtore, 
          SUM(h.tore_gast) heimgegentore,
          SUM(IF(h.tore_heim > h.tore_gast, 3, IF(h.tore_heim < h.tore_heim, 0, 1))) punkte
        FROM
          verein v
          INNER JOIN spiele h ON h.key_Clubheim = V.key_verein and h.key_Spieltyp = 1
        WHERE 
          h.spieltag <= 5
        GROUP BY
          v.name
        ORDER BY
          punkte DESC, v.name ASC
        probier das mal aus

        wenn's passt, dann solltest du die anzahl der siege und niederlagen analog einbauen können

        und was ist key_spieltyp?


        wo du allerdings den spieltag in deiner abfrage drin hast ist mir schleierhaft
        Zuletzt geändert von mrhappiness; 25.07.2004, 20:58.
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Erstmal danke für die prompte anwort. Probier es gleich aus.

          Key_spieltyp ist der Typ des Spiels = Ligaspiel, Pokalspiel, Freunschaftsspiel etc.... in dem FAll LIgaspiel

          Den Spieltag brauch ich erstmal nicht. Erstmal will ich eine Gesamttabelle generieren. Eine Spieltagsbezogene Tabelle kommt evtl später.

          Ich probiers jetzt erstmal aus und melde mich dann nochmals

          Kommentar


          • #6
            Soweit so gut,
            scheint zu funktionieren, allerdings generiert er mir nur die "Heimtabelle" und nicht die Gesamttabelle?

            Muss ich zusätzlich noch einen Join auf key_Clubgast = key_Verein machen?? wenn ja was für einen Join,
            denn mit dem gleichen kommt wieder nur Datenmüll raus...

            Kommentar


            • #7
              heimtabelle?
              gesamttabelle?

              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                Hmmm,
                ich habe 2 komplette Spieltag mal mit Beispielwerten gefüllt.
                an einem spieltag alles spiele 0-1 an einem anderen alle spiele 2-1

                In der Tabelle gibt jetzt aber Teams mit einem Punkt ???
                Das kann ich mir noch nicht so recht erklären, ausserdem wird scheinbar nur ein Spiel für jedes Team berücksichtig nämlich wo das Team als key_Teamheim steht.
                Nicht aber die Spiele wo das Team als key_Teamgast steht????

                Kommentar


                • #9
                  häng mal bitte einen dump der tabelle an
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    CREATE TABLE Spiele (
                    key_spiele mediumint(9) NOT NULL auto_increment,
                    key_clubHeim tinyint(4) NOT NULL default '0',
                    key_clubGast tinyint(4) NOT NULL default '0',
                    Datum date NOT NULL default '0000-00-00',
                    Tore_Heim tinyint(4) default NULL,
                    Tore_Gast tinyint(4) default NULL,
                    key_Spieltyp tinyint(4) NOT NULL default '1',
                    spieltag tinyint(4) NOT NULL default '0',
                    Zuschauer int(11) default NULL,
                    PRIMARY KEY (key_spiele),
                    UNIQUE KEY key_spiele (key_spiele),
                    KEY key_spiele_2 (key_spiele)
                    ) TYPE=MyISAM;

                    Kommentar


                    • #11
                      ein dump enthält auch noch die daten in den tabellen

                      geh in phpmyadmin mal auf exportieren

                      wähle die tabellen spiel eund verein aus und exportiere die dann mitsamt daten (Struktur und Daten)

                      und dann am besten anhängen
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        CREATE TABLE Verein (
                        key_Verein int(11) NOT NULL auto_increment,
                        key_land int(11) NOT NULL default '0',
                        Name varchar(50) NOT NULL default '',
                        wappen varchar(30) NOT NULL default 'unbekannt.jpg',
                        PRIMARY KEY (key_Verein),
                        UNIQUE KEY key_Club (key_Verein),
                        KEY key_Club_2 (key_Verein)
                        ) TYPE=MyISAM;

                        #
                        # Daten für Tabelle `Verein`
                        #

                        INSERT INTO Verein VALUES (1, 1, 'Sport Lisboa e Benfica', 'slb.jpg');
                        INSERT INTO Verein VALUES (2, 1, 'FC Alverva', 'alv.jpg');

                        CREATE TABLE Spiele (
                        key_spiele mediumint(9) NOT NULL auto_increment,
                        key_clubHeim tinyint(4) NOT NULL default '0',
                        key_clubGast tinyint(4) NOT NULL default '0',
                        Datum date NOT NULL default '0000-00-00',
                        Tore_Heim tinyint(4) default NULL,
                        Tore_Gast tinyint(4) default NULL,
                        key_Spieltyp tinyint(4) NOT NULL default '1',
                        spieltag tinyint(4) NOT NULL default '0',
                        Zuschauer int(11) default NULL,
                        PRIMARY KEY (key_spiele),
                        UNIQUE KEY key_spiele (key_spiele),
                        KEY key_spiele_2 (key_spiele)
                        ) TYPE=MyISAM;

                        #
                        # Daten für Tabelle `Spiele`
                        #

                        INSERT INTO Spiele VALUES (1, 1, 35, '2004-07-25', NULL, NULL, 9, 0, 0);
                        INSERT INTO Spiele VALUES (2, 1, 36, '2004-07-17', 2, 0, 9, 0, 0);
                        Zuletzt geändert von stressless; 25.07.2004, 22:57.

                        Kommentar


                        • #13
                          du hast als werte für die torspalten NULL...
                          Ich denke, also bin ich. - Einige sind trotzdem...

                          Kommentar


                          • #14
                            Hier sind nicht alle Werte (sind ja insgesamt 34 Spieltag) hatte zu testzwecken nur die spieltage 30 und 31 eingesetzt.

                            Hier die Werte

                            INSERT INTO Spiele VALUES (272, 24, 47, '2005-04-24', 1, 2, 1, 30, 0);
                            INSERT INTO Spiele VALUES (273, 32, 25, '2005-04-24', 1, 2, 1, 30, 0);
                            ...
                            Zuletzt geändert von stressless; 25.07.2004, 22:57.

                            Kommentar


                            • #15
                              Code:
                              SELECT
                                v.name,
                                SUM(h.tore_heim) heimtore, 
                                SUM(h.tore_gast) heimgegentore,
                                SUM(IF(h.tore_heim > h.tore_gast, 3, IF(h.tore_heim < h.tore_gast, 0, 1))) punkte
                              FROM
                                verein v
                                INNER JOIN spiele h ON 
                              	(h.key_Clubheim = v.key_verein OR
                              	 h.key_clubgast = v.key_verein) AND
                              	h.key_Spieltyp = 1
                              GROUP BY
                                v.name
                              ORDER BY
                                punkte DESC, v.name ASC
                              so sollte es gehen, hab die gastmannschaft auch reingenommen und einen kleinen fehler von oben korrigiert (hab im zweiten IF tore_heim mit tore_heim verglichen, was etwas blöd war)
                              Ich denke, also bin ich. - Einige sind trotzdem...

                              Kommentar

                              Lädt...
                              X