SELECT und JOIN

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

  • SELECT und JOIN

    Ein hallo an alle hier im forum(wenn ihr es den lest)
    Ja ich weiß erst suchen oder den
    Artikel
    lesen. hab ich und bin nicht befriedigt . also nun mal zu meinem prop

    Ich habe 2 tabellen (vereinfacht)

    tabelle article:
    id
    active
    archive
    trash
    language

    tabelle articlecontent:
    id
    articleid
    startdate
    enddate
    active
    archive
    trash
    language

    so nun stehen die tabellen article und articlecontent in einer 1:n beziehung
    ein article kann n articlecontents haben. soweit nix dolles. nun will ich aber eine komplexe abfrage machen und das am besten mit JOIN . Problem hab das noch nicht so wirklich intus , weil ich das noch nicht so ganz gerallt hab. Na gut mein ansatz war wie folgt

    PHP-Code:
    $sqlState "SELECT ac.*, a.* FROM articlecontent ac INNER JOIN 
    article a ON ac.articleid=a.id AND
    ac.active=a.active AND ac.archive=a.archive AND ac.trash=a.trash
     AND
    ac.language=a.language
    WHERE a.id="
    .$articleId." AND a.language=".$lang." AND a.active=1
     AND a.archive=0 AND a.trash=0
    AND ac.startdate<NOW() AND ac.enddate>NOW();"

    wie gesagt das ist nun mal so meine idee gewesen sieht sicherlich grausig aus.
    Aber mit den unterschiedlichen JOIN (LEFT, RIGHT, INNER, OUTER & SELF) ist halt noch alles sehr neu für mich, und es wird auch nirgends wirklich klar und deutlich erklärt(meinem empfinden nach).

    freu mich über jede hilfe

    have a nice day
    alex

    EDIT:
    $scrolling = false;
    // by Abraxax

    Zuletzt geändert von Abraxax; 12.08.2004, 19:50.

  • #2
    was ist an
    alle zahlen auslesen und das quadrat dazu, sofern vorhanden
    Code:
    SELECT
    	t1.zahl, t2.quadrat
    FROM
    	tabelle1 t1
    	LEFT JOIN tabelle2 t2 USING(tab1_id)
    nicht zu verstehen?

    hast du das zeug nicht nur gelesen, sondern hast du dir die 5 minuten zeit genommen und die tabellen erzeugt und die SELECTs ausprobiert?

    abgesehen davon hast du nicht geschrieben was die abfrage dir liefern soll...
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      ok ich erklär es mal ausführlicher.

      ich will einen datensatz aus der article tabelle
      und alle verknüpften datensätze aus der tabelle articlecontent .
      mit den folgenden bedingungen

      article.id=".$articleId."
      article.language=".$lang."
      article.active=1
      article.archive=0
      article.trash=0

      articlecontent.startdate<NOW()
      articlecontent.enddate>NOW()

      ich finde die beispiel in deinem artikel nicht ausreichend erklärt (wie gesagt für mein verständniss), da ich auch wie gesagt ist das halt noch alles sehr neu für mich und somit kann ich deine beispiele schwer auf mein prop adaptieren.

      alex

      ps. danke für das willkommen

      Kommentar


      • #4
        herzlichen willkommen

        und danke für eine ausführliche problembeschreibung

        was liefert dir die abfrage?
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          meine abfrage??? noch gar nichts da ich das erstmal nur theoretisch wissen wollte ob es der richtige weg ist. weil ich meine php klassen dann entsprechend konzipiere(ich bin halt faul und plane erstmal bevor ich prototypes progge ).

          mir ging es ansich darum ob ich das prinzip verstanden hab und ob
          meine abfrage ansich vom sinn und zweck her korrekt sind bzw. auch syntaktisch korrekt ist?

          vielen dank für deine hilfe

          Kommentar


          • #6
            probier's aus

            erst planen und dann "proggen" ist ein hehres ziel, aber plane doch eifnach selbst und teste selbst
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              schade das hilft mir nicht weiter.
              mir würden ein zwei sätze reichen ob man solche abfragen machen kann und ob abfragen mit diesem umfang in ordnung sind? weil so kompliziert ist die abfrage ja auch nicht. wie gesagt ist es syntaktisch korrekt und ist es ratsam oder nicht und warum???

              have a nice day
              alex

              Kommentar


              • #8
                man kann vieles machen, wenn man 's will aber du machst dagegen ja nicht viel, sondern redest nur um den heissen Brei drum

                Kommentar


                • #9
                  habt hier alle so eine hilfreiche bereitschaft in dieser community???
                  was soll das ich stell ne einfache frage. bringe die gedanken ein dich mir dazu gemacht hab und was kommt.? gar nicht!

                  das ist sehr ernüchternd wie hier mit leuten umgegangen wird die 1. neu sind, 2. ne wirklich simple frage stellen und 3. sich auch eigene gedanken gemacht haben.

                  mein vollkommendes unverständniss. welche aroganz mir hier entgegenschlägt ist echt das letzte, das ihr das nötigt habt.

                  ich war weder unfreundlich noch habe ich verlangt hey schreib mir mal
                  ne webware mit diesen und diesen features. ich hab eine einzige zeile PHP code geschrieben und dann sowas. offensichtlich könnt und/oder wisst ihr es nicht.

                  noch ne schönen tag
                  alex

                  Kommentar


                  • #10
                    was spricht denn dagegen, die abfrage, die du oben gepostest hast einfach mal auszuführen?
                    länger als deine frage zu formulieren hätte es mit sicherheit nicht gedauert und du hättest die antwort...


                    aber wenn's dich beruhigt: prinzipiell möglich ist es
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      hör mal was soll man dir denn sonst noch sagen du knallst uns 'ne Abfrage entgegen und fragst, ob 's geht.

                      Sollten wir deiner Meinung nach uns ins Zeugs legen und:

                      1. die beiden Tabelle anlegen
                      2. mit Pseudo-Daten füttern
                      3. die Abfrage drüber jagen

                      um dir das Ergebnis zu liefern, ob 's geht oder nicht?

                      @mrhappiness hat doch gefragt, was die Abfrage dir liefert, aber darauf hast du nicht geantwortet. Stattdessen motzst du nun rum. Es geht dir sonst aber gut, nicht?

                      Kommentar


                      • #12
                        @mrhappiness danke das ist ne info damit kann ich was anfang. sicherlich haste recht das ganze hätte ich auch mal schnell test können, sorry aber ich hab einfach nicht dran gedacht, das ganze in nem kleinen maßstab schnell durch zu testen hab nur mein gesamtes vorhaben im sinn gehabt und da ist es einfach zuviel gewesen aber ich werde es mal im kleinen testen danke

                        @asp2php das hab ich nicht mit einer silbe verlangt. es ist ja auch recht einfach im kopf möglich das szenario schnell durchzuspielen und zu sagen ja oder nein oder ne knappe erklärung warum nicht! das mozuen hat aber auch nen hintergrund wenn du dir einfach mal die reaktionen anschaust die ich erhalten hab. .


                        bye alex

                        Kommentar


                        • #13
                          so hab jetzt mal die ganze sache schnell getestet und dabei meinen
                          sqlQuery etwas präzisiert wie folgt

                          PHP-Code:
                          $sqlState "SELECT ac.lang as acl, a.lang as al, ac.id as acid, a.id as aid
                          FROM articlecontent ac
                          LEFT JOIN article a ON ac.articleid=a.id AND
                          ac.active=a.active AND 
                          ac.archive=a.archive AND 
                          ac.trash=a.trash AND ac.lang=a.lang
                          WHERE a.id="
                          .$articleId." AND 
                          a.lang='"
                          .$language."' AND 
                          a.active=1 AND 
                          a.archive=0 AND 
                          a.trash=0 AND 
                          ac.startdate+0<=CURDATE()+0 AND 
                          ac.enddate+0>CURDATE()+0;"

                          alles looft so wie ich das haben wollte es werden alle datensaätze sauber ausgegeben.
                          meine fragen sind nun 1. wo ist der unterschied zw. INNER JOIN und LEFT JOIN beides looft super erkenne keinen unterschiede? Ist meine bedingungskette zu lang und deshalb weniger praktikabel. gibt es eine effektivere möglichkeit die abfrage zu gestallten.

                          würde mich wie immer über ne antwort freuen.

                          mfg
                          alex

                          EDIT:
                          $scrolling = false;
                          // by Abraxax

                          Zuletzt geändert von Abraxax; 12.08.2004, 19:49.

                          Kommentar


                          • #14
                            INNER JOIN liefert die Schnittmenge der beiden Tabelle, welche die Bedingung aus ON erfüllt sind

                            LEFT JOIN liefert auf jeden Fall alle Daten aus der linken Tabelle (hier: articlecontent), unabhängig davon was in ON steht. Alle Daten, was aus der rechten Tabelle in ON-Bedingung zutrifft, werden der Daten aus der linken Tabelle zugeordnet, sonst werden einfach NULL zugeordnet.

                            die Bedingung in WHERE filtert das Ergebnis zusätztlich. Hier kann man nicht sagen, ob zu viel oder zu wenig, sondern es müssen so viel wie notwendig sein.

                            hier sieht du den Unterschied zwischen inner und left join nicht, weil deine Daten in beiden Tabellen 1:1 in der genannten Bedingungen existieren.

                            Kommentar


                            • #15
                              super vielen dank das hab nun auch ich verstanden . Damit kann ich nun konkret was anfangen. Gerade die abfragen mit JOIN scheinen vielen noobs probleme zu machen da oft das verständniss für die unterschiede fehlt.

                              jetzt bleibt nur noch eine frage für mich offen (für heute aber auch nur)
                              und zwar erhalte ich bei dieser abfrage alle gewünschten datensätze aus der "articlecontent" Tabelle und dazu steht in jedem datensatz immer auch ein und der selbe datensatz aus der tabelle "article". diesen brauche ich aber ja nur einmal und zwar als ersten und die restlichen sollen ja nur die aus der "articlecontent" Tabelle sein. kann ich das mit nem SQL statement bestimmen???

                              aber erstmal vielen dank 4 the help

                              alex

                              Kommentar

                              Lädt...
                              X