MySQL Bundesligaspieltag ausgeben

Ezi

Grünschnabel
Hallo,

eines vorweg: ich bin Anfänger in Sachen MySQL, in php kenn ich mich etwas besser aus.

Seit Jahren betreibe ich für meine Familie, Freunde und Bekannte ein Bundesligatippspiel. Die Benutzer können sich registrieren lassen, sie können sich mit ihrem Passwort anmelden und sie können die Ergebnisse der 1. Bundesliga tippen.
So weit so gut.
Da ich mich bisher nie mit MySQL beschäftigt hatte, erhalte ich die Tipps bisher per E-Mail und ich muss diese händisch auf die Website eintragen. Die Tabellen fertige ich mit Excel an und Lade diese ebenfalls auf die Website. Dies ist sehr zeitaufwendig.

Nun hatte ich die Idee, die Tippabgabe (und vielleicht später auch die Punktevergabe) mit mysql zu realisieren. Ich habe mich schon ziemlich reingearbeitet, meine Datenbank besteht aus 4 Tabellen:
  • user
  • spiele
  • teams
  • tipps
Der Aufbau der Tabellen:

user = spiele_id, saison, spieltag, datum, heim_id, gast_id, tore_heim, tore_gast
teams = team_id, team, shortcut


Für die Ausgabe des Spieltages nutze ich folgende Anweisung:

SELECT spieltag AS Spieltag, DATE_FORMAT(`spiele`.`datum`, '%H:%i') AS Uhrzeit, DATE_FORMAT(`spiele`.`datum`, '%d.%m.%Y') AS Datum, team AS Heim, team AS Gast, Tore_Heim AS Tore, Tore_Gast AS Tore
From spiele, teams
WHERE spieltag = 1
AND heim_id = teams.team_id


Bei dieser Ausgabe wird entweder nur die Heimmannschaft oder nur die Gastmannschaft angezeigt – und dies immer 2-mal (so wäre z.B. Werder Bremen die Heimmannschaft als auch die Gastmannschaft):

Spieltag Uhrzeit Datum Heim Gast Tore Tore

1 20:30 18.08.2023 SV Werder Bremen SV Werder Bremen
1 15:30 19.08.2023 Bayer 04 Leverkusen Bayer 04 Leverkusen
1 15:30 19.08.2023 VfL Wolfsburg VfL Wolfsburg
usw.

Ich habe auch die Gastmannschaft zum anzeigen gebracht, dann ist diese aber auch gleichzeitig Heimmannschaft.

Ich habe schon hunderte andere versuche gestartet, mit GROUP, mit ON….. ich komme hier nicht weiter.


Kann mir jemand einen tipp geben bzw. mir helfen. Wäre sehr dankbar dafür.
Dankeschön.
 
Lösung
"AND gast_id = team_id" noch "AND heim_id = team_id"
Du musst team 2 mal verrknüpfen.
SQL:
SELECT
    gast.team AS gast_team, heim.team AS heim_team
FROM 
    spiele, 
    teams AS gast,
    teams AS heim
WHERE spieltag = 1
    AND gast_id = gast.team_id
    AND heim_id = heim.team_id
ORDER BY datum

Du hast auch zweimal das Feld Tore. Sowas mag SQL gar nicht. Das sind nicht nur titel, sondern Feldnamen für die weitere Benutzung. 2 mal denselben Feldnamen ist absolute Kacke
Guck mal genau hin:

team AS Heim, team AS Gast, Tore_Heim AS Tore, Tore_Gast AS Tore

Du liest team einmal als Heim und einmal als Gast, also sind diese beiden schon mal identisch.
Du liest Tore_Heim einmal als Tore und einmal Tore_Gast als Tore, also hast du nur einmal Tore
 
vielen dank bdt600 für deine Antwort,

ja das mit dem "team AS Heim, team AS Gast" ist schlecht, so habe ich aber wenigstens die Mannschaftsnamen erhalten - allerdings immer 2 mal.

Die nächste Anweisung zeigt mit alles korrekt an, nur beim Mannschaftsnamen wird die Zahl der team_id ausgegeben:

SQL:
SELECT spieltag AS Spieltag, DATE_FORMAT(`spiele`.`datum`, '%H:%i') AS Uhrzeit,
DATE_FORMAT(`spiele`.`datum`, '%d.%m.%Y') AS Datum, heim_id AS Heim, gast_id AS Gast, 
tore_heim AS Tore, tore_gast AS Tore
FROM spiele, teams
WHERE spieltag = 1
AND gast_id = team_id
ORDER BY datum


und wenn ich nach "AND gast_id = team_id" noch "AND heim_id = team_id" bekomme ich gar kein resultat.


Zum andern: Tore_Heim AS Tore, Tore_Gast AS Tore
das AS bedeutet doch nur die Überschrift dass da Tore steht, selektiert wurden die aber (bestimmt) richtig da aus tore_heim und tore_gast gewählt wurde, oder liege ich da falsch?
 
Zuletzt bearbeitet von einem Moderator:
"AND gast_id = team_id" noch "AND heim_id = team_id"
Du musst team 2 mal verrknüpfen.
SQL:
SELECT
    gast.team AS gast_team, heim.team AS heim_team
FROM 
    spiele, 
    teams AS gast,
    teams AS heim
WHERE spieltag = 1
    AND gast_id = gast.team_id
    AND heim_id = heim.team_id
ORDER BY datum

Du hast auch zweimal das Feld Tore. Sowas mag SQL gar nicht. Das sind nicht nur titel, sondern Feldnamen für die weitere Benutzung. 2 mal denselben Feldnamen ist absolute Kacke
 
Lösung
vielen Dank Yaslaw für die Antwort.
das mit dem Team Verknüpfen ("AND gast_id = team_id" noch "AND heim_id = team_id") hatte ich gemacht. Aber bei dieser Kombi gabs kein Ergebnis :-(

Aber DANKE! deine Lösung war glodrichtig :)
 
Zurück