Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] MySQL JOIN

Einklappen

Neue Werbung 2019

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

  • [Erledigt] MySQL JOIN

    Hallo,

    ich habe soeben ein Tutorial über Joins in Mysql gelesen: Einführung in Joins.

    Nur weiß ich nicht, welchen Join ich für mein Vorhaben brauche.

    Ich will im Prinzip nur die Tabelle "Datum" mit der Tabelle "Schiene" "verknüpfen". Dafür hab ich mir die Hilfstabelle "Datum_Schiene" angelegt, die die Spalten "DatumID" und "SchieneID" enthält.

    Welchen Join muss ich anwenden, um quasi die Tabellen "Datum" und "Schiene" über "Datum_Schiene" zusammenzuführen?

    Danke im Voraus!

    LG,
    Paeisi

  • #2
    Hay Paeisi,

    Also ich hab das jetzt so verstanden, falls das so nicht stimmt, schreib einfach nochmal

    Du hast 3 Tabellen:

    Schiene
    Datum
    Datum_Schiene

    Jetzt kannst du die folgendermaßen verknüpfen:

    Code:
    SELECT * FROM Datum_Schiene INNER JOIN Datum ON Datum_schiene.DatumID = Datum.DatumID INNER JOIN Schiene ON Datum_schiene.SchieneID = Schiene.SchieneID
    War es das was du wolltest ?

    Grüße
    Marc

    Mein derzeitiges WebProjekt: http://www.xtaste.de

    Kommentar


    • #3
      Wenn ich annähernd diesen verdammten Join verstehen würde, könnte ich Dir sagen, ob der Code der ist, den ich suche. Befasse mich jetzt seit 2 Stunden mit diesem Tutorial, aber ich steh noch auf dem Schlauch .

      Aber es stimmt schon, wie Du es verstanden hast.

      Datum: ID, Datum
      Schiene: ID, Name, ZeitStart, ZeitEnde
      Datum_Schiene: DatumID, SchieneID

      Ich verwende die Hilfstabelle, weil ich die gleiche Schiene mehreren Daten "zuordnen" kann, da wäre es ja schwachsinn, für jeden Tag ein- und dieselbe Schiene anzulegen. Also das ist schon sinnvoll so mit der Hilfstabelle oder?

      Kannst Du mir erklären, was genau der Query jetzt bewirkt? Wäre echt nett, vielleicht verstehe ich es dann an meinem Beispiel.

      Thy

      Kommentar


      • #4
        Also schau, ich versuche es dir mal zu erklären =)

        Also wie du bereits erwähnt hast, hast du die 3 Tabellen.

        Datum: ID, Datum
        Schiene: ID, Name, ZeitStart, ZeitEnde
        Datum_Schiene: DatumID, SchieneID (Hier fehlt noch die ID)


        So gehen wir mal näher auf deine Tabellen ein, und füllen sie mal mit Muster-Daten:

        Tabelle Datum

        ID Datum
        1 16.08.2010
        2 17.08.2010
        3 18.08.2010

        Tabelle Schiene

        ID Name ZeitStart ZeitEnde
        1 Schiene1 16:00 17:00
        2 Schiene2 15:00 16:00
        3 Schiene3 14:00 15:00

        Tabelle Datum_Schiene

        ID DatumID SchieneID
        1 1 1
        1 1 2
        1 2 1

        So, angenommen du verwendest jetzt meine Query erhälst du folgendes Ergebnis:

        ID DatumID SchieneID Datum.ID Datum Schiene.ID Name ZeitStart ZeitEnde
        1 1 1 1 16.08.2010 1 Schiene1 16:00 17:00

        Natürlich bekommst du hier alle Felder ausgegeben, auf die die jeweilige ON Bedingung zutrifft.

        Tut mir leid wegen der schlechten Darstellung, aber irgendwie geht das hier nicht besser.

        So, hoffe das reicht, oder gibts noch erklärungsbedarf ?

        Mein derzeitiges WebProjekt: http://www.xtaste.de

        Kommentar


        • #5
          Ach das ON ist ne Bedingung. Kann man das mit WHERE vergleichen?

          Ich möchte nämlich nur die Datensätze bekommen, bei denen Datum.ID (z.B.) den Wert 1 hat.

          Und warum brauch ich bei Datum_Schiene noch eine ID?

          Also meine db ist momentan mit diesen Daten gefüllt:

          Tabelle Datum
          ID Tag Monat Jahr
          1 06 11 2010

          Tabelle Schiene
          ID Name ZeitStart ZeitEnde
          1 Schiene1 1500 1600
          2 Schiene2 1605 1700
          3 Schiene3 1705 1800

          Tabelle Datum_Schiene
          SchieneID DatumID
          1 1
          2 1

          Mein Code zum Ausgeben sieht so aus:
          PHP-Code:
              $sql mysql_query('SELECT * FROM Datum_Schiene INNER JOIN Datum ON Datum_Schiene.DatumID = Datum.ID INNER JOIN Schiene ON Datum_Schiene.SchieneID = Schiene.ID');
              while (
          $schiene mysql_fetch_array($sql)) {
                 echo 
          '<p>'.$schiene['Schiene.ID'].' - '.$schiene['Name'].', '.$schiene['ZeitStart'].' bis '.$schiene['ZeitEnde'].'</p>';
              } 
          Ausgegeben bekomme ich ein doch schon annähernd annehmbares Ergebnis:

          - Schiene1, 1500 bis 1600
          - Schiene2, 1605 bis 1700

          Das mit der ID stimmt nicht ganz, was muss ich da ändern

          Wie kann ich auch die oben genannte Bedingung einbauen?

          Kommentar


          • #6
            Oke das freut mich,

            naja nicht ganz, ON verknüpft halt die Tabellen mit den gegebenen Werten, in deinem fall wäre das die Datum_Schiene.SchieneID mit Schiene.ID und Datum_Schiene.DatumID mit Datum.ID.

            Also er sagt der Datenbank welche Werte zusammen gehören.

            Where Bedingung kannst du folgendermaßen einbauen:
            SELECT * FROM Datum_Schiene INNER JOIN Datum ON Datum_Schiene.DatumID = Datum.ID INNER JOIN Schiene ON Datum_Schiene.SchieneID = Schiene.ID WHERE Datum.ID = 1

            Soviel dazu.

            Um die ID zu bekommen die dir fehlt benutze:


            PHP-Code:
                $sql mysql_query('SELECT * FROM Datum_Schiene INNER JOIN Datum ON Datum_Schiene.DatumID = Datum.ID INNER JOIN Schiene ON Datum_Schiene.SchieneID = Schiene.ID'); 
                while (
            $schiene mysql_fetch_array($sql)) { 
                   echo 
            '<p>'.$schiene['SchieneID'].' - '.$schiene['Name'].', '.$schiene['ZeitStart'].' bis '.$schiene['ZeitEnde'].'</p>'
                } 
            So, hast du sonst noch irgendwelche Fragen ?

            VG Marc

            Mein derzeitiges WebProjekt: http://www.xtaste.de

            Kommentar


            • #7
              PERFEKT, jetzt hab ich genau das, was ich wollte und bin super gelaunt (mit Planetradio im Ohr) !

              Ich denke, im Moment sind meine Fragen beantwortet

              Aber eine hätt ich noch: Wenn ich einen Update/Insert vornehmen will, mach ich einfach mehrere querys den Tabellen entsprechend oder?

              Vielen Dank, hast mir echt voll geholfen, jetzt kanns weiter gehen!

              LG

              Kommentar


              • #8
                Das freut mich zu hören.

                Ja dann einfach mehrere Querys.

                VG
                Marc

                Mein derzeitiges WebProjekt: http://www.xtaste.de

                Kommentar


                • #9
                  Hey Neo,

                  ich steh schon wieder vor dem nächsten Problem, vielleicht kannst du mir ja nochmal helfen:

                  Wenn ich eine neue Schiene anlegen will, habe ich meine normalen Eingabefelder mit Name, ZeitStart, ZeitEnde. Zusätzlich gibt es für jedes Datum eine Checkbox, um zuzuordnen, an welchem/n Datum/Daten diese Schiene läuft.

                  Ich zeig Dir einfach mal den Code, den ich mir jetzt zusammengeschrieben habe:
                  PHP-Code:
                        mysql_query('INSERT INTO Schiene (Name, ZeitStart, ZeitEnde) VALUES ("'.$_POST['Name'].'", "'.$_POST['ZeitStart'].'", "'.$_POST['ZeitEnde'].'")');
                        
                  $sql mysql_query('SELECT * FROM Datum');
                        while (
                  $datum mysql_fetch_array($sql)) {
                          
                  $datumid $datum['ID'];
                          
                  $lastid mysql_insert_id();
                          if (
                  $_POST[$datumid] == "1") {
                            
                  mysql_query('INSERT INTO Datum_Schiene (DatumID, SchieneID) VALUES ("'.$datumid.'", "'.$lastid.'")');
                          }
                        } 
                  Aber es will nicht hinhauen. Wüsste jetzt nicht, was daran falsch wäre, deshalb frage ich dich wieder :P.

                  LG

                  Kommentar


                  • #10
                    Wo bleibt dabei der Eintrag für die Checkbox?

                    Kommentar


                    • #11
                      Kannst du mal das Formular posten ? sonst ist es schwer
                      außerdem

                      PHP-Code:
                      mysql_query('INSERT INTO Datum_Schiene (DatumID, SchieneID) VALUES ("'.$datumid.'", "'.$lastid.'")') or die(mysql_error(); 
                      Also wenn du Probleme mit dem Query hast, am besten erstmal hintendran "or die(mysql_error()) dranhängen, dann siehst du ob der Fehler in der Query liegt.

                      VG
                      Marc

                      Mein derzeitiges WebProjekt: http://www.xtaste.de

                      Kommentar


                      • #12
                        Oh sorry, habe ich vergessen. Hier:
                        PHP-Code:
                              $sql mysql_query('SELECT * FROM Datum');
                              echo 
                        '
                              <form method="POST" action="'
                        .$_SERVER['REQUEST_URI'].'">
                                <input type="hidden" name="sent" value="1" />
                                Name: <input type="text" name="Name" value="" /><br />
                                Beginn Uhrzeit: <input type="text" name="ZeitStart" value="" /><br />
                                Ende Uhrzeit: <input type="text" name="ZeitEnde" value="" /><br />
                                Läuft am<br />'
                        ;
                              while(
                        $datum mysql_fetch_array($sql)) {
                               echo 
                        '<input type="checkbox" name="'.$datum['id'].'" value="1" /> '.$datum['Tag'].'.'.$datum['Monat'].'.'.$datum['Jahr'].'<br />';
                              }
                              echo 
                        '  <input type="submit" value="hinzufügen" />
                              </form>'

                        or die (mysql_error()) hatte ich schon angehängt, aber keine Fehlermeldung erhalten.

                        LG

                        Kommentar


                        • #13
                          Kannst du mir bitte noch sagen was er den nicht richtig ausführt ?
                          Also füllt er die Datenbank nicht ? oder Füllt er falsche Werte ? oder wird das gar nicht ausgeführt ?

                          VG
                          Marc

                          Mein derzeitiges WebProjekt: http://www.xtaste.de

                          Kommentar


                          • #14
                            Die Datenbank wird nicht gefüllt, aber Error bekomme ich auch keinen. Dementsprechend weiß ich nicht, ob er überhaupt ausführt, denn ich sehe nur eine weiße Seite, auch mit or die (mysql_error());.

                            Wofür brauche ich denn das Feld ID in der Tabelle Datum_Schiene? Vielleicht liegt es daran, dass ich keinen PRIMARY-Key vergeben habe?

                            Kommentar


                            • #15
                              Die ID brauchst du damit mysql weiß welcher Datensatz der letzte war der eingetragen wurde, normalerweise ist ID Primary und Auto Increment

                              So, dann probier einfach mal ob du die Sql in PHPMyAdmin direkt ausführen kannst, wenn du willst kannst du mir mal den kompletten code hier senden, dann schreib ich den kurz für dich um damit er das macht was du willst und schreib kommentare hin wo du denkfehler hattest =)

                              VG
                              Marc

                              Mein derzeitiges WebProjekt: http://www.xtaste.de

                              Kommentar

                              Lädt...
                              X