Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] ERD: Tabelle->2Fremdschlüssel->gleicher PS?

Einklappen

Neue Werbung 2019

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

  • [Erledigt] ERD: Tabelle->2Fremdschlüssel->gleicher PS?

    Hallo liebes Forum

    Ich erarbeite mir derzeit ein Ligenscript. Mit dem PHP-Script habe ich bereits einen generierten Spielplan in eine Datenbank von PHPmyAdmin geladen. Das ERD dazu sieht folgendermaßen aus:



    Tabelle "spiele":


    Problem: Ist es überhaupt möglich, das 2 FS einer Tabelle den gleichen PS haben? (siehe rote Markierung)
    Mein Ziel ist es, dass ich per JOIN-Abfrage die tid(Team-ID) zu den jeweiligen Teams zuordnen kann. Ich habe selber schon viele JOIN-Varianten probiert, dennoch gab es kein erfolgreiches Ergebnis, so dass die beiden Teams namentlich erscheinen. Habe schon überlegt Gast und Heim-Team in seperaten Tabellen unterzubringen, aber da hätte ich in beiden Tabellen die selben Teams stehen, was auch nicht Sinn der Normalisierung ist.
    Also wer Lösungsansätze hat, kann die gern Posten.

  • benschworld
    antwortet
    Lösung durch testen schon gefunden:
    Code:
        $read_cursor = mysql_query("SELECT t1.teamname AS Heimteam, t2.teamname AS Auswaertsteam FROM spiele JOIN teams t1 ON t1.tid=spiele.heim JOIN teams t2 ON t2.tid=spiele.gast");
        while($result = mysql_fetch_array($read_cursor)) 
        {
        echo $result["Heimteam] . " - " . $result["Auswaertsteam"] . "<br>\n";
        }

    Einen Kommentar schreiben:


  • benschworld
    antwortet
    Uh stimmt, an die Aliase hatte ich nicht gedacht. Habe dein Beispiel jetzt so angewendet wie du es geschrieben hast. Funktioniert genau so wie ich wollte.
    Code:
    SELECT t1.teamname, t2.teamname
    FROM spiele
    JOIN teams t1
    ON t1.tid=spiele.heim
    JOIN teams t2
    ON t2.tid=spiele.gast
    Vielen Dank

    EDIT:
    Jetzt ist mir dennoch ein Problem aufgefallen bei der Ausgabe in PHP. Ist es möglich, dass PHP sich schwer tut mit den Alias'en?
    Mir werden nur die " - " angezeigt, aber keine Teamnamen!
    Code:
        $read_cursor = mysql_query("SELECT t1.teamname, t2.teamname FROM spiele JOIN teams t1 ON t1.tid = spiele.heim JOIN teams t2 ON t2.tid=spiele.gast");
        while($result = mysql_fetch_array($read_cursor)) 
        {
        echo $result["t1.teamname"] . " - " . $result["t2.teamname"] . "<br>\n";
        }

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Zitat von benschworld Beitrag anzeigen
    Auf mein Beispiel angewendet, sieht es so aus, funzt aber nicht:
    Code:
    SELECT spiele.heim, spiele.gast
    FROM spiele
    JOIN teams t1
    ON t1.tid=spiele.heim
    JOIN teams t2
    ON t2.tid=spiele.gast
    Wenn eine Tabelle mehrfach verbunden wird (Join), dann muss ein Alias die Tabelle genauer beschreiben (siehe t1 und t2 ).

    Funzt es jetzt...?

    Grüße
    Thomas

    Einen Kommentar schreiben:


  • fab
    antwortet
    Zitat von benschworld Beitrag anzeigen
    Meines erachtens sieht es so aus, als ob du denkst, dass in meiner "teams"-Tabelle jeweils einmal Heim und Gast-Team stehen, also dann jeder Verein 2mal drin steht.
    Nein, das ist schon richtig, beachte die Verwendung der Aliase th und tg mit denen die beiden JOINS unterschieden werden. Benutze doch mal exakt das Beispiel von Thomas

    Einen Kommentar schreiben:


  • benschworld
    antwortet
    Danke an Thomas erstmal, aber ich kann deine Art wie du es geschrieben hast nicht auf meins Anwenden. Meines erachtens sieht es so aus, als ob du denkst, dass in meiner "teams"-Tabelle jeweils einmal Heim und Gast-Team stehen, also dann jeder Verein 2mal drin steht. Auf mein Beispiel angewendet, sieht es so aus, funzt aber nicht:
    Code:
    SELECT spiele.heim, spiele.gast
    FROM spiele
    JOIN teams
    ON teams.tid=spiele.heim
    JOIN teams
    ON teams.tid=spiele.gast

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Du kannst jederzeit mehrere Foreign Key Spalten (=FS) auf eine Tabelle auf den Primary KEY (=PS) referenzieren lassen .

    Die SQL-Abfrage könnte dann so aussehen (wenn ich mich nicht vertippt habe):

    Code:
    SELECT th.teamname, tg.teamname
      FROM spiele s
      JOIN teams th
        ON th.tid = s.heim
      JOIN teams tg
        ON tg.tid = s.gast;
    Grüße
    Thomas

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Klar geht das. Zwei JOINs jeweils auf „teams“.

    Einen Kommentar schreiben:

Lädt...
X