join von 2 Tabellen

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

  • join von 2 Tabellen

    Hallo,

    ich habe folgendes Problem:
    Ich habe 2 tabellen erstellt.
    In der 1. Tabelle werden Termine eingetragen. Hier ist der Primarykey die erste Spalte names id (auto_increment)
    In der 2. Tabelle sind folgende Felder enthalten:
    id (auto_increment primary)
    terminid //Verknüpfung zu der 1. Tabelle beinhaltet den Wert der id (Spalte)
    gruppenid //Beinhaltet ein Zahl zw. 1 und 6

    Nun würde ich gerne eine sqlabfrage starten, die mir alle termine aus der 1. Tabelle ausliest die in der 2. Tabelle tabelle gruppenid=2 und terminid=id(der 1.Tabelle) beinhalten.
    Ich weiß, dass es mit nem Join-Befehl (aber welcher) gehen soll aber da ich das noch nie gemacht habe komme ich da leider nicht weiter.

    Ich würde mich über eure Hilfe sehr freuen.

    Gruß

    Tobias

    P.S:
    Habe mal screenshots von den Tabellen gemacht.

    Tabelle 1:


    [edit @25.5.03 21.00]
    Tabelle 2:

    Zuletzt geändert von tsaenger; 25.05.2003, 20:05.

  • #2
    Code:
    SELECT t1.*
    FROM tabelle1 t1
    INNER JOIN tabelle2 t2
    ON t1.id=t2.terminid
    HAVING t2.gruppenid=2
    wahlweise auch WHERE statt HAVING

    P.S. Dein zweites Bild sieht dem ersten verblüffend ähnlich *g*
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Hi
      Danke für den syntax.
      Werde es mal austesten.
      Tatsache habe versentlich das selbe bild angegeben.

      Das ist die 2 Tabelle:

      Gruß
      Tobias

      Kommentar


      • #4
        Hallo

        Habe es nun ausprobiert.
        Mein Syntax lautet:

        $result_monate = mysql_query("
        SELECT t1.*
        FROM $table t1
        INNER JOIN $table_connect t2
        ON t1.id=t2.terminid
        HAVING t2.gruppenid=2"
        );
        if ($result_monate)
        {echo "ok";}
        else
        {echo "<P>".mysql_error($conn);}

        Leider bekomme ich dann folgende Fehlermeldung:
        Unknown column 't2.gruppenid' in 'having clause'

        Das versteh ich nicht die Spate existiert doch!?!

        Bitte um Hilfe.

        Grüße

        Tobias

        Kommentar


        • #5
          sorry, mein fehler

          nehm WHERE statt HAVING
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            Hallo,

            Vielen Dank
            Hat funktioniert.

            Gruß
            Tobias

            Kommentar


            • #7
              freut mich. mehr zu select gibt's auf der offiziellen homepage im online-handbuch
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                Hallo,

                Ein Problem habe ich da jetzt noch.

                Früher konnte ich bei einer einfachen selectabfrage mit
                PHP-Code:
                while ($row_monate mysql_fetch_array($result_monate))
                  {
                  
                $array_monate[$monat_zaehler]=$row_monate["DATE_FORMAT(datum_anfang,'%Y%m')"];
                  
                $monat_zaehler++;
                 } 
                auf die Spalte datum_anfang drauf zugreifen.
                Nun geht das aber nicht mehr.

                Muss ich nun:
                PHP-Code:
                $row_monate["DATE_FORMAT(t1.datum_anfang,'%Y%m')"]; 
                arbeiten?

                Gruß
                Tobias

                Kommentar


                • #9
                  mach aus
                  Code:
                  SELECT DATE_FORMAT(datum_anfang,'%Y%m') FROM tabelle
                  das hier:
                  Code:
                  SELECT DATE_FORMAT(datum_anfang,'%Y%m') datum FROM tabelle
                  jetzt kannst du auf jeden fall mit $row_monate['datum'] drauf zugreifen (is find ich hypscher *g*)

                  und: ja, wenn du die tabelle in deinem select als t1 bezeichnest musst du auch überall ein t1. vornedranschreiben wo du felder der tabelle verwendest

                  steht aber zeimlich sicher in dem geposteten link...
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    Hallo,
                    Vielen Dank für deine Hilfe.

                    Aber leider hänge ich schon wieder fest.
                    ich würde gerne meinen join nun erweiter.
                    Ich habe noch eine 3. Tabelle die mit der 2.Tabelle verbunden werden soll.
                    Die Felder gruppenid aus der 2. Tabelle sollen mit dem Feld id aus der 3.Tabelle verbunden werden, sodass ich in meiner select abfrage sagen kann:

                    SELECT $table_connect.*,$table_unterkat.*,
                    t1.beschreibung
                    From $table t1 ,$table_connect,$table_unterkat
                    INNER JOIN $table_connect t2 ON t1.id=t2.terminid
                    INNER JOIN $table_unterkat t3 ON t2.gruppenid=t3.id <-- stimmt das?
                    WHERE
                    t3.zuordnung=$zuordnung

                    Dieser Befehl soll alle Datensätze aus Tabelle 1 ausgeben die die Zuordnung = 2 haben.
                    Das müsste doch eigentlich so gehen oder?
                    gruß
                    Tobias

                    P.S:
                    Habe auch die 3 Tabelle mal angehängt.

                    Kommentar


                    • #11
                      sieht auf den ersten blick richtig aus

                      was funktioniert denn nich so wie gewünscht?
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        Hallo,
                        Ich bekomme den die gleichen Datensätze komischerweise mehrfach.
                        Kann ich mir irgendwie anschauen, welche Datensätze genau selektiert wurden?
                        Gruß
                        Tobias

                        P.S. Meine Whileschleife sieht wie folgt aus:
                        while ($row1 = mysql_fetch_array($result1))
                        {
                        echo "Azahl der Durchläufe=$i";
                        $i++;
                        }
                        Es dürfen maximal 50 Einträge sein. I wird aber bis 3600 hochgezählt.

                        Kommentar


                        • #13
                          probier mal SELECT DISTINCT
                          Ich denke, also bin ich. - Einige sind trotzdem...

                          Kommentar


                          • #14
                            Hallo,
                            Ich habe den fehler gefunden.
                            Weiß nur leider nicht, wie ich ihn beheben kann.
                            Es ist momentan mit dem Left Join so, dass jede ID aus Tabelle 1 mit der duzugehörigen gruppenid aus tabelle 2 verknüpft wird. Das heißt, wenn ich 4 Termine habe, dann selectiert er mir schon 16 zeile.
                            Das sollte aber nicht so sein.
                            Ich würde gerne nur zu jeder id aus der 1.tabelle die dazugehörige gruppenid aus der tabelle2 zugorordnet haben.
                            Momentan sieht es wie folgt aus:
                            terminid=1 gruppenid=2
                            terminid=1 gruppenid=2
                            terminid=1 gruppenid=2
                            terminid=1 gruppenid=2
                            terminid=2 gruppenid=4
                            terminid=2 gruppenid=4
                            terminid=2 gruppenid=4
                            terminid=2 gruppenid=4
                            terminid=3 gruppenid=3
                            terminid=3 gruppenid=3
                            terminid=3 gruppenid=3
                            terminid=3 gruppenid=3
                            terminid=4 gruppenid=1
                            terminid=4 gruppenid=1
                            terminid=4 gruppenid=1
                            terminid=4 gruppenid=1

                            Mein befehl dazu:

                            $result_monate = mysql_query("
                            SELECT
                            $table_connect.terminid,$table_connect.gruppenid,
                            t1.id, DATE_FORMAT(t1.datum_anfang,'%m') monat, DATE_FORMAT
                            (t1.datum_anfang,'%Y') jahr, DATE_FORMAT(t1.datum_anfang,'%Y%m') datum
                            FROM $table t1 ,$table_connect
                            left JOIN $table_connect t2 ON t1.id=t2.terminid
                            ");

                            Ich würde mein seclect statement so ändern, dass folgendes nur selectiert wird.
                            terminid=1 gruppenid=2
                            terminid=2 gruppenid=4
                            terminid=3 gruppenid=3
                            terminid=4 gruppenid=1

                            Ich habe ja schließlich auch nur 4 Termine in meiner Datenabk stehen!

                            Mit freundlichen Grüßen

                            Tobias

                            P.S: Screenshots zu den tabellen sind in den vorhergehenden nachrichten
                            Unter ms access habe ich es zum funktionieren gebracht.
                            Der Syntax:
                            SELECT table.id, table_connect.terminid, table_connect.gruppenid, table_unterkat.beschreibung
                            FROM table_unterkat
                            INNER JOIN (table_connect INNER JOIN [table] ON table_connect.terminid = table.id) ON table_unterkat.id = table_connect.gruppenid;
                            Nur leider mag das mysql nicht.
                            Wie kann ich das umschreiben?
                            Zuletzt geändert von tsaenger; 03.06.2003, 14:44.

                            Kommentar


                            • #15
                              Ich glaube ich habs nun selbst herausgefunden.
                              Muss es noch zu hause mal tetsen.

                              $result_monate = mysql_query("SELECT
                              $table.id, $table_connect.terminid, $table_connect.gruppenid, $table_unterkat.name
                              FROM $table_unterkat
                              INNER JOIN $table_connect ON $table_connect.terminid = $table.id
                              INNER JOIN $table ON $table_unterkat.id = $table_connect.gruppenid
                              where $table_connect.gruppenid=2
                              ");
                              Gruß
                              Tobias

                              Kommentar

                              Lädt...
                              X