Tabellen verknüpfen mit JOIN, sorry ;)

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

  • Tabellen verknüpfen mit JOIN, sorry ;)

    Hi Leute,

    bevor mir jetzt irgend jemand den Kopf anreißt, sage ich gleich, dass ich das JOIN-Tut von mrhappiness (http://www.php-resource.de/forum/sho...threadid=28292) gelesen habe. Aber ich bekomme das irgendwie nicht wirklich hin.

    Die Umstände:

    Ich habe eine Auftragstabelle mit Auftragsnummern. In jedem Datensatz steht eine Auftragsnummer (order_id_generated) mit einer Vertreter-ID (agent_id).

    Nun möchte ich mir nur die Aufträge aus einem bestimmten Land (z.B. Spanien) anzeigen lassen. Das Land steht aber nicht in der Auftragstabelle, aber dafür in der Vertretertabelle (country) - z.B. 4 für Spanien.

    Aufträge: order_id_generated -- agent_id

    Vertreter: id (leider nicht agent_id) -- country

    Also ist die Vertreter-ID bei den Aufträgen unter "agent_id" und in der Vertretertabelle unter "id".

    Also muss ich so fragen: Lese mir alle Auftragsnummern aus, bei denen der Vertreter aus Österreich ist. Ich verstehe nur den Syntax noch immer nicht richtig.

    Wäre super, wenn mir da jemand helfen könnte!

    Danke schon im Voraus!

    Greetz Lukas

  • #2
    ON tabelle1.id = tabelle2.agent_id
    where typ kommt aus österreich
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      hmm, sorry. Wäre es zu viel verlangt, wenn du mir das ganze Query mal aufschreibst? Danke!

      Jetzt habe ich es so:

      Code:
      SELECT
        order_id_generated
      FROM
        $tablename_orderlist t1
      INNER JOIN $tablename_agentlist t2
      
      ON $tablename_orderlist.agent_id = $tablename_agentlist.id
      
      WHERE country = '4'
      Dann bekomme ich aber den Fehler: Unknown table 'orderlist' in on clause. Die Tabelle existiert aber!

      Und 2. Frage: In deinem Tut steht ein mal ...INNER JOIN tabelle2 t2 ON t1.tab1_id = t2.tab2_id

      Ist es egal, ob man t1 bzw. t2 oder den kompletten Tabellennamen hinschreibt?

      Danke vielmals!

      Greetz Lukas

      Kommentar


      • #4
        es ist nicht egal, wenn du
        Code:
        FROM ewig_langer_tabellenname t1
        schreibst, dann machst du das hauptsächlich ausd dem eifnachengrund dir tipparbeit zu sparen.
        du sagst mysql, dass du die tabelle mit dem namen "ewig_langer_tabellenname" in deinem SELECT lieber mit dem viel kürzeren namen "t1" ansprechen willst. natürlich musst du dann auch überall "t1" verwenden, da "ewig_langer_tabellenname" dann eine für mysql unbekannte tabelle ist, schließlich hast du sie ja umbenannt

        abgesehen davon sieht das SELECT ja schon ganz vernünftig aus, aber tu mir einen gefallen und nehm die ' bei der 4 (im WHERE) raus, das ist ja mit ziemlicher sicherheit eine zahl und kein string
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Original geschrieben von mrhappiness
          das ist ja mit ziemlicher sicherheit eine zahl und kein string
          OffTopic:
          bei den (Möchtegern-)Progger heutzutage kannst du nie sicher sein

          Kommentar


          • #6
            OffTopic:
            ich hab mich nicht umsonst gegen "mit absoluter sicherheit" entscheiden
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Ich persönlich würde folgendes Statement verwenden:
              Code:
              SELECT
                t1.order_id_generated
              FROM
                $tablename_orderlist t1
              INNER JOIN $tablename_agentlist t2
              ON t1.agent_id = $tablename_agentlist.id
              AND t2.country = 4
              ... das laufzeitverhalten sollte günstiger sein ...

              ... im übrigen kann es ganz geschickt sein die 4 in Anführungszeichen zu schreiben ... insbesondere wenn der Wert aus einem Übergabeparameter kommen sollte ... (natürlich muss er dann auch noch escaped werden) ... den Typecast führt automatisch durch ... und ich würde das ehrlichgesagt nicht ganz zeitkritisch sehen ...
              carpe noctem

              [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
              [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

              Kommentar


              • #8
                naja, wenn ich weiß, dass es ein integer ist, dann schreibe ich einfach
                PHP-Code:
                $sql ' ... WHERE id = '.(int)$_POST['country_id']; 
                oder so

                zeitkritisch wird's ziemlich sicher nicht sein, aber ich find's einfach sauberer, aber über geschmack lässt sich ja bekanntlich streiten
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  Ich persönlich verwende im Allgemeinen auch 'nen Type-Cast ... nur halte ich die Schreibweise für irrelevant ... phpMyAdmin hat's jahrelang so gemacht ...
                  carpe noctem

                  [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                  [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                  Kommentar

                  Lädt...
                  X