Join über 3 Tabelle

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

  • Join über 3 Tabelle

    Hey Leute, brauche dringend Hilfe.

    Ich habe 3 Tabellen vorliegen Kurs, Schüler und nimmtteil.
    nimmtteil ist die Relationstabelle, die aus einer n:m Beziehung der beiden anderen resultiert.
    Sie enthält neben den Primärschlüßeln der beiden anderen tabelle ein attribut Schuljahr.
    Nun möchte ich mir Vornamen, Nachnamen, Jahrgangsstufe, sowie das Schuljahr der Schüler ausgeben lassen, die in einem bestimmten Kurs ( eingegeben über php Formular) gehen.
    Jedoch weiß ich nicht wie ich den select Befehl schreiben soll.

    Hier mein Versuch :

    PHP-Code:

    $result
    =mysql_query("SELECT Vorname,Nachname,Jahrgangsstufe, Schuljahr FROM Kurs,nimmtteil,Schüler where nimmtteil.Kurs_ID IN(SELECT Kurs_ID FROM Kurs where Kursbezeichnung='$Kursbezeichnung' and Lehrerkuerzel='$Lehrerkuerzel') and nimmtteil.Schüler_ID=Schüler.Schüler_ID"); 
    Hoffe ihr könnt mir helfen.
    Danke im Vorraus.

  • #2
    Die Basics findest du hier recht gut erklärt: http://www.php-resource.de/forum/sql...-abfragen.html

    Vielleicht kannst du deinen Code zunächst ein bisschen säubern (z.B. LEFT-Joins verwenden) und noch einmal übersichtlich darstellen. Insbesondere Zeilenumbrüche und klar machen, welche Spalten aus welcher Tabelle kommen.

    Wenn ich dich richtig verstanden habe kommt Schuljahr aus nimmtteil? Was passiert, wenn ein Schüler in zwei Schuljahren teilgenommen hat?

    Kommentar


    • #3
      Danke werde mich auf jeden Fall nochmal reinlesen.
      Ja Schuljahr befindet sich in nimmtteil.
      Wenn ein Schüler nochmal an diesem Kurs teilnehmen sollte, müsste er noch einmal im nächsten Jahr neu eingetragen werden und so würde der selbe Schüler zwar zwei mal am selben Kurs teilnehmen, jedoch in unterschiedlichen Schuljahren.

      Kommentar


      • #4
        Wenn ein Schüler nochmal an diesem Kurs teilnehmen sollte, müsste er noch einmal im nächsten Jahr neu eingetragen werden.
        Nein, die Frage war, welches Ergebnis (des Queries) du erwartest, wenn ein Schüler den Kurs zweimal belegt hat.

        Kommentar


        • #5
          Dann würde beispielsweiße solch ein Ergebnis rauskommen:

          Vorname Nachname Jahrgangsstufe Schuljahr

          Hans Wurst 10 2011
          Hans Wurst 11 2012

          Kommentar


          • #6
            Sollte kein problem darstellen. ggf. musst du ein bisschen mit der Reihenfolge der Tabellen experimentieren, falls es nicht auf Anhieb klappt.

            Kommentar


            • #7
              Ich hab mir das durchgelesen, aber bin nicht wirklich schlauer draus geworden.
              Ich kann das Prinzip nicht wirklich auf meine Tabellen übertragen.

              In meinen Augen scheint meine Lösung doch richtig zu sein. Anders wüsste ich nicht wie ich das lösen könnte.

              Kommentar


              • #8
                was kommt denn derzeit raus?

                Kommentar


                • #9
                  Hi tsg04,

                  wenn lt. deinem Beispiel . . .

                  Hans Wurst 10 2011
                  Hans Wurst 11 2012

                  . . . ein Schüler in zwei versch. Stufen in zwei versch. Jahren einen Kurs besucht, würde ich noch die jeweilige Stufe,
                  in der ein Schüler war/ist, in die Teilnahme-Tabelle aufnehmen.

                  Ansonsten brauchst du eigentlich nur die Schlüsselfelder deiner Tabellen mit denen der Teilnahme-Tabelle zu verknüpfen,
                  dazu war doch deine "Relationstabelle" gedacht

                  <code>
                  select vorname, nachname, stufe, kurs, jahr from kurse, schueler, teilnahme
                  where schueler.id=teilnahme.sch_id and kurse.id=teilnahme.k_id
                  and kurs = 'Formulareingabe' . . . usw..
                  </code>

                  Gruß
                  Günni

                  Kommentar

                  Lädt...
                  X