chris: MySQL: Bezug zwischen 2 Tabellen herstellen

Guten Tag

Ich habe zwei MySQL-Tabellen erstellt. Die eine (tabelle1) enthält u.a. folgende Spalten:
Spalte 1: heimteam
Spalte 2: gastteam

Die zweite Tabelle (tabelle2) enthält u.a. folgende Spalten:
Spalte 1: groupid
Spalte 2: teamname

Nun möchte ich eine Tabelle ausgeben lassen welche die Begegnungen (heimteam - gastteam) ausgibt. In 'tabelle1' habe ich in den jeweiligen Spalten jedoch nur Zahlenwerte verwendet die der Spalte groupid aus 'tabelle2' entsprechen. Anstatt dass einfach direkt der Inhalt der Spalten aus 'tabelle1' ausgegeben wird (die ja nur Zahlen enthält). Soll zuerst jede Zahl mit den Zahlen aus 'tabelle2'/Spalte'groupid' verglichen werden und falls diese gleich sind der dazugehörige ein Teamname (spalte teamname aus tabelle2) zugeordnet bzw. ausgegeben werden. Kann mir jemand sagen wie ich einen solchen Bezug zwischen 2 Tabellen herstelle. Ich könnte auch direkt die Begegnungen in Tabelle 1 eintragen, errachte dies aber nicht als sinnvoll da die gleichen Teamnamen mehrmals vorkommen und bei einer Änderung auch alle einzeln geändert werden müssten.  Danke für eure Hilfe!

Gruss Chris

PS: Der PHP-Teil (Ausgabe der Ergebnisse etc.) ist mir nicht wichtig. Mir geht es nur um die MySQL-Abfrage.

  1. Hallo

    Ich habe zwei MySQL-Tabellen erstellt.

    ...

    Nun möchte ich eine Tabelle ausgeben lassen welche die Begegnungen (heimteam - gastteam) ausgibt. In 'tabelle1' habe ich in den jeweiligen Spalten jedoch nur Zahlenwerte verwendet die der Spalte groupid aus 'tabelle2' entsprechen. Anstatt dass einfach direkt der Inhalt der Spalten aus 'tabelle1' ausgegeben wird (die ja nur Zahlen enthält). Soll zuerst jede Zahl mit den Zahlen aus 'tabelle2'/Spalte'groupid' verglichen werden und falls diese gleich sind der dazugehörige ein Teamname (spalte teamname aus tabelle2) zugeordnet bzw. ausgegeben werden. ...

    JOIN ist Dein Freund. Naehere Informationen findest Du zb hier (oder jeder anderen SQL Dokumentation):
    http://www.mysql.de/documentation/mysql/bychapter/manual.de_Reference.html#JOIN

    Gruss, Mel

  2. Womöglich habe ich mich etwas kompliziert ausgedrückt. Ich versuche deshalb mein Problem nochmals etwas genauer zu schildern.
    Zuerst zu dem was ich erreichen möchte. Es soll eine Tabelle nach folgendem Muster ausgegeben werden:
    Spaltenüberschriften: Zeit; Heimteam; Gast; Schiedsrichter; etc.
    Ausgabebeispiel (formatiert): 13:30, FC Irgendwas - FC Entenhausen, Schiedsrichter: FC Luzern

    Zu diesem Zweck habe ich eine MySQL-Tabelle ('spielplan') mit den gleichen Überschriften angelegt. Die in dieser Tabelle enthaltenen Daten sehen folgendermassen aus (Beispielzeile):
    Zeile aus Tabelle ' spielplan': 13:30;B1;A3;D1

    Würde ich mit einem normalen "SELECT * FROM spielplan" eine Abfrage machen, sähe die formatierte Ausgabe nun etwa so aus:
    Ausgabebeispiel: 13:30, B1 - A3, Schiedsrichter: D1

    Dies ist natürlich nicht das Ziel. Die  einzelnen Teamnummern (B1, A3 etc.) sollen bei der Ausgabe durch den dazugehörigen Teamnamen ersetzt werden. Also B1 wird in unserem Fall zu FC Irgendwas etc.
    Um dies zu realisieren habe ich eine zweite Tabelle angelegt ('teams' ->Spalten teamid und teamname), in welcher jeder Teamnummer eine Mannschaftsname zugeordnet wird. Das sieht dann in etwa so aus:
    teamid;teamname
    --------------------------
    A1;FC Irgendwas
    ...
    B1; FC Entenhausen
    ...
    D1;FC Luzern

    Und nun möchte ich die beiden Tabellen verknüpfen. Wenn man nur jeweils eine Spalte aus den beiden Tabellen nimmt klappt das auch wunderbar mit einer LEFT JOIN Anweisung. Doch wie muss ich vorgehen wenn ich alle Teamnummern (in mehreren Spalten vorhanden) aus der Tabelle 'spielplan' gleichzeitig durch den dazugehörigen Teamnamen ersetzen will?

    Ich habe mal eine Ersetzung für die in Spalte heimteam (Tabelle spielplan) vorhandenen Werte vorgenommen. Die Abfrage sieht in etwa so aus.
    SELECT spielplan.heimteam, teams.* FROM spielplan AS sp LEFT JOIN teams as t ON sp.heimteam = t.teamid

    Dieses Prinzip soll aber für alle Spalten der Tabelle 'spielplan' angewendet werden können, wennmöglich in einer einzigen Abfrage. Wie lautet da die korrekte MySQL-Syntax?

    Gruss chris

    1. Hi Chris,

      Ah, allmaehlich wirds klar - wie saehe es denn mit mehrfachen Joins aus? In MySQL hab ich's noch nicht ausprobiert, also der Code ist jetzt  ungetestet. In anderen DBs geht sowas:

      -------------
      SELECT sp.zeit, t1.teamname, t2.teamname, sp.heimteam, t3.teamname  FROM  spielplan AS sp LEFT JOIN teams as t1 ON sp.heimteam = t1.teamid LEFT JOIN teams as t2 ON sp.gast = t2.teamid LEFT JOIN teams as t3 ON sp.schiedsrichter = t3.teamid
      -------------

      Gruss, Mel