Ankündigung

Einklappen
Keine Ankündigung bisher.

Hilfe bei Join

Einklappen

Neue Werbung 2019

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

  • Hilfe bei Join

    hallo zusammen,

    ich habe zwei tabellen, eine mit orten und eine mit strecken und möchte gerne bei den strecken die namen der orte ausgeben (bei von und nach stehen die id.s der orte)

    ORTE
    +-------------+--------------+
    | id |name |
    +-------------+--------------+
    | 1 | Wien |
    | 2 | Paris |
    | 3 | Zürich|
    +-------------+--------------+

    STRECKEN

    +----+------+------+
    | id | von |nach |
    +----+------+------+
    | 1 | 1 | 2 |
    | 2 | 1 | 3 |
    | 3 | 2 | 3 |
    +----+------+------+

    habe schon das internet durchforstet und viele joins gefunden, aber keinen, der ähnlich aufgebaut wäre bzw. verstehe ich nur bahnhof.

    könnte mir bitte jemand helfen?

    vielen dank!
    omshanti

  • #2
    Du solltest das Netz nicht nach passenden Joins durchsuchen, sondern nach einer Seite oder einem Tutorial, das Dir das Prinzip des JOINS verständlich erklärt. Dann kannst Du dieses und alle Folgeprobleme zukünftig selbst lösen.

    Vielleicht diese Seite: http://aktuell.de.selfhtml.org/artik...nbanken/joins/

    Kommentar


    • #3
      hi nikosch,

      natürlich habe ich auch nach tutorials gesucht, aber ich habe es einfach nicht verstanden bzw. nicht auf meine tabellen anwenden können. mit "normalen" joins habe ich auch schon gearbeitet, aber heute stellt sich mir halt diese aufgabe für eine seite, bei der ich im moment nicht weiter komme.

      lg
      omshanti

      Kommentar


      • #4
        Ich hab mir "damals" einen Join-Syntax erstellt worauf ich heute noch bei Bedarf zurückgreife:

        SELECT
        [spalten]
        FROM [table1]
        INNER JOIN [table2]
        ON [primärkey] = [fremdkey]

        Sollte selbsterklärend sein


        Sonnigen Gruß

        Kommentar


        • #5
          Hallo omshanti,
          was du dort brauchst ist auch nur ein "normaler" JOIN (bzw. zwei). Wenn du weißt wie JOINS grundsätlich funktionieren, wo scheiterst du denn dann bei diesem Fall genau?
          Du brauchst zwei JOINS auf die Orts-Tabelle und musst wissen, dass man Tabellen einen Alias verpassen kann ( table_1 JOIN realtablename aliasname ON aliasname.field = .... )

          Kommentar


          • #6
            hallo agrajag,

            ich scheitere momentan daran, dass ich für die strecken zweimal eine id aus den orten auslesen muss. das hatte ich bislang noch nicht sowas. normalerweise brauche ich nur jeweils einen wert aus den tabellen.

            was ich momentan habe:

            $strecken_ = mysql_query("SELECT s.*, o.*
            FROM strecken s, orte o
            WHERE s.von = o.id
            ");

            das würde gut funktionieren, wenn ich nur 1x den ort brauchen würde, aber ich brauche ihn ja auch nochmal für das ziel der strecke

            liebe grüße
            omshanti

            Kommentar


            • #7
              Zunächst mal würde ich deinen Beispiel-JOIN so schreiben:
              Code:
              SELECT 
                s.*, o.*
              FROM
                strecken s
              JOIN
                orte o
              ON 
                o.id = s.von
              also mit der JOIN ... ON -Synthax. Aber das ist vielleicht geschmackssache.

              Der nächste Schritt: Du hast schon gemerkt, dass du den Ort "nochmal brauchst". Also schreiben wir das ganze nochmal etwas anders
              Code:
              SELECT 
                strecke.*, von_ort.*
              FROM
                strecken strecke
              JOIN
                orte von_ort
              ON 
                von_ort.id = strecke.von
              Jetzt brauchen wir noch den Namen des Zielorts. Wie? Wieder ein JOIN. Einfach einen weiteren JOIN einfügen. JOINS lassen sich beliebig verketten:
              Code:
              SELECT .... FROM table1 t1 JOIN table2 t2 ON t1.field = t2.field JOIN table3 ON t2.field=t3.field JOIN ....
              Und du brauchst in deinem fall einfach ein weiteres JOIN orte nach_ort ON ...

              Kommentar


              • #8
                hallo arajag,

                ein stück weiter bin ich schon, zumindest in gedanken - vielen dank!
                allerdings nimmt er mir das mit dem zweiten join nicht (erhalte ich fehlermeldung) und ... was gebe ich dann bei der ausgabe an??

                was ich jetzt habe:

                $strecken_ = mysql_query("SELECT strecke.von, strecke.nach, strecke.preis, von_ort.name
                FROM
                strecken strecke
                JOIN orte von_ort ON strecke.von = von_ort.id
                JOIN orte von_ort ON strecke.nach= von_ort.id
                ");

                while($strecken = mysql_fetch_array($strecken_))
                {

                echo $strecken['????von'];
                echo $strecken['????nach'];


                }

                liebe grüße
                omshanti

                Kommentar


                • #9
                  select * from orte o,strecken s where o.id=s.id
                  oder
                  select o.id,o.name,s.von,s.nach from orte o,strecken s where o.id=s.id

                  Kommentar


                  • #10
                    amateur_php: Das ist nicht was er sucht - soweit waren wir ja schon

                    omshanti: Du musst bei deinem zweiten JOIN einen anderen Alias verwenden.

                    Ich bin jetzte einfach mal so frei:

                    Code:
                    SELECT 
                      strecke.preis, start_ort.name as start, ziel_ort.name as ziel
                    FROM
                      strecken strecke
                    JOIN
                      orte start_ort ON start_ort.id = strecke.von
                    JOIN
                      orte ziel_ort ON ziel_ort.id = strecke.ziel
                    Wie die resultierenden Daten aussehen kannst du dir mit var_dump() oder print_r() dann anschauen.

                    Ich würde dir empfehlen dich wirklich mal tiefer mit JOINS zu beschäftigen - du wirst sie noch oft brauchen

                    Kommentar


                    • #11
                      hallo agrajag,

                      vielen dank für deine unterstützung. ich sitze hier jetzt seit x-stunden und "joine" herum. denke, irgendwie kann das ja nicht so schwer sein, aber die logik hat sich mir noch nicht ganz erschlossen. scheinbar sitze ich irgendwo auf der leitung und ehrlich gesagt ist mir mittlerweile zum heulen, weil mir das nicht gelingen mag. ich gehe jetzt einmal schlafen ... vielleicht gibts mir ja "der herr im schlaf"

                      danke für deine mühe & gn8
                      omshanti (<= sie)

                      Kommentar


                      • #12
                        hallo agrajag,

                        er hats mir tatsächlich im schlaf gegeben *g - da war noch ein fehler drin bei ziel_ort.id = strecke.nach (nicht strecke.ziel)


                        $strecken_ = mysql_query("SELECT
                        strecke.preis, start_ort.name as start, ziel_ort.name as ziel
                        FROM
                        strecken strecke
                        JOIN
                        orte start_ort ON start_ort.id = strecke.von
                        JOIN
                        orte ziel_ort ON ziel_ort.id = strecke.nach
                        ");

                        while ($row = mysql_fetch_array($strecken_)) {
                        printf ($row[1]);
                        printf ($row[2]);
                        }

                        vielen dank nochmals für deine mühe - weiss ich sehr zu schätzen!
                        omshanti

                        Kommentar

                        Lädt...
                        X