Abfrage über 3 Tabellen mit Join

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

  • Abfrage über 3 Tabellen mit Join

    Hi,

    ich habe leider ein grosses Problem mit der Abfrage über 3 Tabellen und komme dabei einfach nicht weiter. Ich habe bereits auch in einem anderen Forum nach Lösungen gesucht, aber auch da war nichts was mir helfen konnte. Ich hoffe daher hier fündig zu werden, da ich sonst noch wahnsinnig werde.

    Ich habe eine Tabelle mit Spielplänen. Die Tabelle „tblSpielplan“ sieht so aus:
    Code:
    +-------------+--------------+-----------+----------------+------------+------------+
    | [u]SpielplanID[/u] | SaisonLigaID | Datum     | Spieltagnummer | HeimTeamID | GastTeamID |
    +-------------+--------------+-----------+----------------+------------+------------+
    | 1           | 7            | 1.10.2006 | 1              | 55         | 56         |
    | 2           | 7            | 1.10.2006 | 1              | 61         | 59         |
    +-------------+--------------+-----------+----------------+------------+------------+
    Nun möchte ich die Möglichkeit geben, diesen Spielplan wieder zu ändern. Das bedeutet, dass drei Sachen passieren müssen.
    1. Auslesen des Spielplanes um die momentanen Spielbegegnungen anzeigen zu können
    2. Auslesen einer zweiten Tabelle, die alle möglichen Teams ausliest.
    3. Verbinden dieser zweiten Tabelle mit der dritten Tabelle um die Namen auszulesen.

    Die Darstellung erfolgt dann über mehrere Dropdownfelder, wobei das momentan ausgewählte Team bereits selektiert ist.

    Nun also mein Problem. Die zweite Tabelle „tblLigaTeams“ mit allen Teams sieht so aus:
    Code:
    [u]LigaID[/u]
    SaisonLigaID
    TeamID
    In der dritten Tabelle „tblTeams“ stehen die Team Namen:
    Code:
    [u]TeamID[/u]
    TeamName
    Mein bisheriger Ansatz:
    Code:
    SELECT 
    tblSpielplan.MatchNo,tblSpielplan.Datum,tblSpielplan.HeimTeamID,
    tblSpielplan.GastTeamID,
    tblLigaTeams.TeamID, tblTeams.TeamName
    	
    FROM
    tblSpielplan
    	
    INNER JOIN
    tblLigaTeams
    ON tblSpielplan.SaisonLigaID=tblLigaTeams.SaisonLigaID
    
    INNER JOIN 
    tblTeams 
    ON tblLigaTeams.TeamID=tblTeams.TeamID
    	
    WHERE
    SaisonLigaID= '7' AND MatchNo='$MatchNo' ");
    Bei 5 Teams in der Tabelle Liga Teams würde das also 5 Resultate ergeben. Nun versuche ich jedoch ein Array mit den jeweiligen Teams (Heim und GastTeamID) zu füllen, um dieses dann später in die Dropdownfelder einzubauen.

    PHP-Code:
    while ($Saisonmysql_fetch_array($select))
    {
       
    $SpielplanTeamIDHeim[]=$Saison['HeimTeamID'];
       
    $SpielplanTeamIDGast[]=$Saison['GastTeamID'];

    Bei 2 Spielen, sprich 2 Heim und 2 Gastmannschaften, jedoch 5 Duchläufen klappt das so natürlich nicht.

    Wie kann man sowas also lösen, das man alle Teams aus der Tabelle tblLigaTeams auslesen kann und nur 2 Datensätze aus der Tabelle Spielpläne ?

    Ich verzweifle noch. Jemand eine Idee, einen Ansatz damit ich weiterkomme? Vielen Dank im Voraus.

  • #2
    wozu dient tblLigaTeams?

    Kommentar


    • #3
      Es gibt verschiedene Ligen, daher hat jede Liga auch ihre eigenen Teams die ihr angehören. Das steht dann in "tblLigaTeams".

      Kommentar


      • #4
        ich würde 'alle teams' separat zum voraus mit SELECT auslesen und in einen array speichern. Diese brauchst du dann für die Ausgabe des popups. dann liest du den aktuellen Spielplan aus und verwendest für das popup den array 'alleteams'.

        Es geht meiner Meinung nach nicht gut, die Daten des Spielplans und die Daten des popups in einem SELECT auszulesen. Das heisst, das Auslesen ist kein Problem, aber daraus html zu generieren, wird mühsam.

        Hier aber wie man die Daten des Spielplans und zusätzlich alle Mannschaften auf einmal ausliest.

        Code:
        SELECT A.*, Heim.teamname as Heimname,Gast.teamname as Gastname, 
          HT.teamid as HTid, HT.teamname as HTname, 
          GT.teamid as GTid, GT.teamname as GTname 
        from tblSpielplan as A
          join tblLigaTeams as HL on HL.SaisonLigaId=A.SaisonLigaId
          join tblTeams as HT on HL.TeamdId=HT.teamId
          join tblLigaTeams as GL on GL.SaisonLigaId=A.SaisonLigaId
          join tblTeams as GT on GL.LigaId=GT.teamId
          join tblTeams as Heim on A.HeimTeamId=Heim.TeamId
          join tblTeams as Gast on A.GastTeamId=Gast.TeamId
          where A.SaisonLigaId=7
        Erklärung. einige Tabellen werden mehrfach gejoint:
        A - Spielplan
        Heim - aktuelle Heimmannschaft
        Gast - aktuelle Gastmannschaft
        HL, HT - alle Mannschaften als mögliche Heimmannschaft
        GL, GT - alle Mannschaften als mögliche Gastmannschaft

        Kommentar


        • #5
          Du bist jetzt der Zweite mit dem Vorschlag 2 Anfragen zu stellen, daher denke ich mal das ihr Recht habt und man manchmal einfach nicht so kompliziert denken muss. Ich habe dennoch Deinen Vorschlag mal ausprobiert, bekam jedoch keine Resultate zurück.

          Es ist wirklich nicht einfach, wenn man alleine vor solchen Problemem steht und nicht weiss, welcher Weg nun der Richtige ist. Daher bin ich wirklich dankbar das es solche Boards gibt, wo man auch mal seine Gedanken austauscht.

          Vielen Dank dafür. Ich werde mich jetzt mal damit versuchen, die 2 Anfragen und die Dropdowns zu erstellen.

          Nochmal vielen Dank für Euer Feedback.

          Kommentar


          • #6
            Original geschrieben von Luka
            Ich habe dennoch Deinen Vorschlag mal ausprobiert, bekam jedoch keine Resultate zurück.
            Mein Vorschlag ist fehlerfrei, bezogen auf deine Beschreibung

            (ausser wenn saisonligaid nicht numerisch sondern varchar() ist. Dann müsste where saisonligaid='7' stehen aber solche kleinigkeiten hättest du selber auspoliert)
            Zuletzt geändert von sternm; 29.09.2006, 22:15.

            Kommentar


            • #7
              Entschuldige, vielleicht ist mir auch ein Fehler in der Übersetzung unterlaufen. Ich schreibe alles immer in Englisch und übersetze es dann wieder auf deutsch für das Board. Macht es leichter für alle hier denke ich. Da kann es aber dann vorkommen, das ich in der Schnelle was falsch zurück übersetzt habe. Deine SQL Anweisung war ja ziemlich mächtig.

              Und Nein, es lag nicht an der 7...
              Zuletzt geändert von Luka; 29.09.2006, 22:19.

              Kommentar


              • #8
                Original geschrieben von Luka
                Entschuldige, vielleicht ist mir auch ein Fehler in der Übersetzung unterlaufen. Ich schreibe alles immer in Englisch und übersetze es dann wieder auf deutsch
                Hast du ein deutschsprachiges mySQL??

                wie lautet dein echtes sql-statement und wie lautet mysql_error() ??????

                Kommentar


                • #9
                  Jo habe ich. Nur die Tabellen haben alle englische Namen. Das meinte ich damit. Englische Namen könnten aber eher verwirren, deswegen schreibe ich die dann auch deutsch.

                  Eine Fehlermeldung kam nicht, nur die Ausgabe von mysql_num_rows($select) war 0.

                  Leider kann ich dir die SQL Anweisung nicht mehr komplett schreiben, da ich bereits an der Lösung mit 2 Anfragen schreibe und der Rest jetzt gelöscht ist.

                  Kommentar

                  Lädt...
                  X