Liga Ergebnistabelle erstellen

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

  • Liga Ergebnistabelle erstellen

    Hallo,

    ich verzweifel gerade an der Erstellung einer Ergebnistabelle (a la Fußballbundesliga Tabelle). Aus einer bestehenden Spielplan-Tabelle mit allen Ergebnissen möchte ich ein Ranking über die Platzierung der Teams generieren. Es soll dabei keine neue DB-Tabelle erstellt, sondern direkt aus dem Spielplan mit einer SQL-Anfrage berechnen werden.

    Team-Tabelle:

    Code:
    CREATE TABLE `k_teams` (
      `team_id` int(10) unsigned NOT NULL auto_increment,
      `team_name` varchar(255) NOT NULL default '',
      PRIMARY KEY  (`team_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
    Spielplan-Tabelle:

    Code:
    CREATE TABLE `k_spielplan` (
      `spiel_id` int(10) unsigned NOT NULL auto_increment,
      `spiel_spieltag` int(10) unsigned NOT NULL default '0',
      `spiel_teamheim` varchar(255) NOT NULL default '0',
      `spiel_teamgast` varchar(255) NOT NULL default '0',
      `spiel_toreheim` int(10) NOT NULL default '0',
      `spiel_toregast` int(10) NOT NULL default '0',
      `spiel_punkteheim` int(10) unsigned NOT NULL default '0',
      `spiel_punktegast` int(10) unsigned NOT NULL,
      PRIMARY KEY  (`spiel_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=91 ;
    Hab mich schon an einem Statement bemüht, aber funktioniert noch nicht wirklich. Problem ist die Berechnung und Zuordnung durch die Heim/Auswärtspartien. :-(

    Code:
    SELECT spiel_teamheim AS id, 
    k_teams.team_name AS team, 
    sum( spiel_toreheim ) AS toregesamtheim, 
    sum( spiel_toregast ) AS toregesamtgast, 
    sum( spiel_toreheim - spiel_toregast ) AS torediff, 
    sum( spiel_punkteheim ) AS punkteheim, 
    sum( spiel_punktegast ) AS punktegast
    FROM k_spielplan
    LEFT JOIN k_teams ON k_spielplan.spiel_teamgast = k_teams.team_name
    GROUP BY k_spielplan.spiel_teamheim
    ORDER BY punkteheim DESC , torediff DESC , toregesamtheim DESC
    Gibt es eine elegante Lösung für mein Problem bzw. kann man es überhaupt lösen?

    Besten Dank im Voraus
    Tom

  • #2
    Bei den Datenbankstrukturen wäre ein möglicher Ansatz mit einer Subquery die Heimpunkte und -tore und mit einer weiteren Subquery die Auswärtspunkte und -tore zu summieren und die beiden Ergebnisse mit UNION zu verbinden.
    Dann werden die Punkte und Tore zusammensummiert und zum Sortieren verwendet.

    Direkte Lösung kann ich zu dieser späten Stunde nicht mehr bieten ;-). Informationen über UNION findest du aber hier:

    http://dev.mysql.com/doc/refman/5.1/de/union.html


    Eine eventuell einfachere Lösung wäre es, für jedes Spiel zwei Einträge in der Datenbank abzulegen, einmal aus Sicht der Heimmannschaft und einmal aus Sicht der Auswärtsmannschaft. Dann können die Punkte und Tore direkt mit einer Query summiert und sortiert werden.

    Dabei ist mir noch aufgefallen, dass spiel_teamheim VARCHAR(255) ist und den Namen des Teams enthält. Sinnvoller wäre es evtl hier die ID des Teams abzulegen. Dadurch würde die Tabelle kleiner und Namen von Teams könnten einfacher geändert werden.

    Kommentar

    Lädt...
    X