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.

  • #2
    Klar geht das. Zwei JOINs jeweils auf „teams“.
    [COLOR="#F5F5FF"]--[/COLOR]
    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
    [COLOR="#F5F5FF"]
    --[/COLOR]

    Kommentar


    • #3
      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

      Kommentar


      • #4
        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

        Kommentar


        • #5
          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
          [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
          [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

          Kommentar


          • #6
            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

            Kommentar


            • #7
              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";
                  }

              Kommentar


              • #8
                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";
                    }

                Kommentar

                Lädt...
                X