Announcement

Collapse
No announcement yet.

Ligatabelle erstellen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ligatabelle erstellen

    So langsam wirds immer schwieriger...

    Ich brauche eine Ligatabelle einer Saison, sprich mit Mannschaftsname, Punkte und ggf. Tordifferenz

    Hier erstmal der Aufbau der relevanten Tabellen:

    teams
    teamId
    name

    matches
    homeId
    guestId
    goalsHome
    goalsGuest

    Über ein CASE könnte ich jetzt die Spiele nach Toren auswerten und Punkte geben. Aber leider gelingt es mir nur mit den Heim- oder Auswärtsspielen, da ich die teamId nur mit homeId oder guestId verknüpfen kann. Für eine komplette Tabelle bräuchte ich aber beides zusammen. Wie kann ich hier vorgehen? Mir fehlt der Ansatz.

    mfg 0per8or

  • #2
    Das richtige Schlüsselwort hast Du schon selbst genannt:
    mit homeId oder guestId verknüpfen
    =>
    [highlight=SQL]FROM matches AS m
    INNER JOIN teams AS t
    ON m.homeID = t.teamID
    OR m.guestid = t.teamID[/highlight]
    Die Tore musst Du, wie Du auch schon erwähnt hast, über eine Fallunterscheidung auswerten.

    Eine alternative dazu wäre es 2 SELECT mit einem UNION zu verbinden:
    [highlight=SQL]SELECT t.name, m.goalsHome AS Goals
    FROM matches AS m
    INNER JOIN teams AS t
    ON m.homeID = t.teamID
    WHERE ...
    UNION
    SELECT t.name, m.goalsGuest AS Goals
    FROM matches AS m
    INNER JOIN teams AS t
    ON m.guestid = t.teamID
    WHERE ...
    [/highlight]
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Danke! Meine vollsätndige Abfrage sieht jetzt so aus.

      [highlight=SQL]
      SELECT
      t.name,
      SUM(CASE
      WHEN m.homeId = t.teamId THEN m.goalsHome - m.goalsGuest
      WHEN m.guestId = t.teamId THEN m.goalsGuest - m.goalsHome
      END) AS GoalDifference,
      SUM(CASE
      WHEN m.goalsHome > m.goalsGuest AND m.homeId = t.teamId THEN 3
      WHEN m.goalsHome = m.goalsGuest AND m.homeId = t.teamId THEN 1
      WHEN m.goalsHome < m.goalsGuest AND m.homeId = t.teamId THEN 0
      WHEN m.goalsHome > m.goalsGuest AND m.guestId = t.teamId THEN 0
      WHEN m.goalsHome = m.goalsGuest AND m.guestId = t.teamId THEN 1
      WHEN m.goalsHome < m.goalsGuest AND m.guestId = t.teamId THEN 3
      END) AS Points
      FROM matches AS m
      INNER JOIN teams AS t
      ON m.homeID = t.teamID
      OR m.guestid = t.teamID
      INNER JOIN leagues AS l ON t.leagueId = l.leagueId
      WHERE m.season = '2008/2009'
      AND l.name = '1. Bundesliga'
      GROUP BY t.name
      ORDER BY Points DESC
      ;
      [/highlight]

      Comment

      Working...
      X