problem bei join

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

  • #16
    guten abend!

    habe es noch immer nicht geschafft..!

    also ich schildere noch einmal die problematik:

    zwei tabellen: movie_data, user_movie

    movie_data: movieid|title|genre|regisseur|..andere filmdaten

    user_movie: userid|movieid|status


    nun möchte ich eine abfrage machen, welche mir als ergebniss jene filme liefert, die mit einem bestimmten user in keinem zusammenhang stehen.

    beispiel:

    movie_data:
    1|last samurai|action|edward zwick|...
    2|spider-man|action|sam raimi|...
    3|...
    4|...
    ...

    user_data:
    1|maxi|max|mustermann
    2|michi|michaela|musterfrau
    3...
    4...
    ...

    user_movie:
    userid|movieid|status
    1|1|3
    1|3|3
    1|4|2
    2|1|1
    3|2|1
    4|1|1
    4|2|0

    jetzt möchte ich zb abfragen, welche filme mit dem user mit der userid=1 in keinem zusammenhang stehen.

    in meinem fall oben sollte das ergebniss also 2 sein

    mündlich formuliert müsste meine abfrage also in etwa so lauten:

    hole alle movie-daten aus movie_data wo die movie_id nicht in user_movie vorkommt und der username=2 ist


    wie kann ich das jetzt ein ein valides sql-statement verwandeln..?!!!


    bitte bitte bitte helft mir denn sonst schaffe ich es nicht..!!!!



    lg, harry d.

    Kommentar


    • #17
      mahlzeit leute!

      habe die abfrage leider immer noch nicht geschafft..!

      habe jetzt im access herumprobiert die anfrage mit den editor zu erstellen und dann das sql-statment zu kopieren *schäm* aber nicht einmal das habe ich geschafft..!

      kann mir wirklich keiner helfen??


      lg, harry d.

      Kommentar


      • #18
        hallo noch einmal!

        habe gerade einen kleinen fortschritt gemacht..!

        dieser query ließt mir alle filme aus, die nichts mit dem gewünschten user zu tun haben (dafür aber mit allen anderen und ich möchte ja wie schon weiter oben noch einmal genauer beschrieben alle auslesen die mit dem gewünschtem user in der table user_movie in keinem zusammenhang stehen):

        PHP-Code:

        $sql 
        mysql_query("SELECT DISTINCTROW t1.movieid AS movieid, t1.title AS title,
        t1.genre AS genre, t1.regisseur AS regisseur, t1.description AS description 
        FROM movie_data t1 LEFT JOIN user_movie t2
        USING(movieid)
        WHERE t2.userid<>'"
        .get_userid()."'") or die(mysql_error()); 

        um jetzt das zu erreichen was ich brauche, würde ich ein keyword benötigen, welches das gegenteil von USING ist..! gibt es so etwas..?


        lg, harry d.

        Kommentar


        • #19
          Original geschrieben von icon
          dieser query ließt mir alle filme aus, die nichts mit dem gewünschten user zu tun haben (dafür aber mit allen anderen und ich möchte ja wie schon weiter oben noch einmal genauer beschrieben alle auslesen die mit dem gewünschtem user in der table user_movie in keinem zusammenhang stehen)
          1. bitte Interpunktion auch verwenden, solang kann ich die Luft nicht anhalten
          2. lies mal deinen Satz nochmals, ich verstehe nicht was du willst

          Kommentar


          • #20
            hallo asp2php!

            gleich einmal vielen vielen dank für deine hilfe!!!


            also ich schildere noch einmal die problematik:

            zwei tabellen: movie_data, user_movie

            movie_data: movieid|title|genre|regisseur|..andere filmdaten

            user_movie: userid|movieid|status


            nun möchte ich eine abfrage machen, welche mir als ergebniss jene filme liefert, die mit einem bestimmten user in keinem zusammenhang stehen.

            beispiel:

            movie_data:
            1|last samurai|action|edward zwick|...
            2|spider-man|action|sam raimi|...
            3|...
            4|...
            ...

            user_data:
            1|maxi|max|mustermann
            2|michi|michaela|musterfrau
            3...
            4...
            ...

            user_movie:
            userid|movieid|status
            1|1|3
            1|3|3
            1|4|2
            2|1|1
            3|2|1
            4|1|1
            4|2|0

            jetzt möchte ich zb abfragen, welche filme mit dem user mit der userid=1 in keinem zusammenhang stehen.

            in meinem fall oben sollte das ergebniss also 2 sein

            userid=2: 2,3,4
            userid=3: 1,3,4
            userid=4: 3,4

            mündlich formuliert müsste meine abfrage also in etwa so lauten:

            hole alle movie-daten aus movie_data wo die movie_id nicht in user_movie vorkommt und der username=2 ist


            wie kann ich das jetzt ein ein valides sql-statement verwandeln..?!!!



            lg, harry d.

            Kommentar


            • #21
              Original geschrieben von icon
              hole alle movie-daten aus movie_data wo die movie_id nicht in user_movie vorkommt und der username=2 ist
              select a.* from movie_data a left join user_movie b on a.movie_id=b.movie_id and b.user_id=2 where b.movie_id is null

              Kommentar


              • #22
                Du solltest Deinen JOIN anders herum aufbauen und mit der Tabelle
                user_movie anfangen, dann auf die movie_data JOINEN :
                PHP-Code:
                SELECT [felderFROM user_movie
                LEFT JOIN movie_data 
                USING 
                (movieid)
                WHERE movie_data.movieid IS NULL
                AND user_movie.userid != ".get_userid() 
                Die user_id ist doch ein integer, dann darfst Du keine '' nehmen, sonst funzt kein Index. Mit != allerdings auch nicht

                Am besten suchst Du Dir vorher alle anderen Userids raus, packst sie in ein
                array $OtherUsers und machst dann die Abfrage mit

                PHP-Code:
                AND user_movie.userid IN (".implode(",", $OtherUsers)."
                Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

                Kommentar


                • #23
                  hallo!

                  gleich einmal vielen herzlichen dank!!! ich werde es gleich austesten..!!!!

                  Kommentar


                  • #24
                    so.. habe es so wie asp2php gemacht:

                    PHP-Code:

                    $sql 
                    mysql_query("SELECT DISTINCTROW a.* FROM movie_data a
                    LEFT JOIN user_movie b ON a.movieid=b.movieid AND b.userid="
                    .get_userid()."
                    WHERE b.movieid is null"
                    ) or die(mysql_error()); 
                    .. und es scheint perfekt zu funktionieren!!!


                    super wäre es allerdings (natürlich nur falls jemand zeit hat), wenn mir das jemand erklären könnte, damit ich nächstes mal wenn ich so ein kleines problem habe nicht wieder fast 2 tage warten muss, bis ich eine passende lösung habe..


                    vielen dank noch einmal an alle die mir geholfen haben - und besonders an asp2php!!!


                    lg, harry d.

                    Kommentar


                    • #25
                      Original geschrieben von icon
                      super wäre es allerdings (natürlich nur falls jemand zeit hat), wenn mir das jemand erklären könnte, damit ich nächstes mal wenn ich so ein kleines problem habe nicht wieder fast 2 tage warten muss, bis ich eine passende lösung habe..
                      - tblA left join tblB bedeutet erst mal: nehme alle Zeilen von tblA egal was in ON steht.
                      - ON tblA.x=tblB.y: nehme Zeilen von tblB dazu, falls die Bedingung in ON zutrifft, wenn nicht dann NULL dafür einsetzen
                      - ON ... AND ... : zusätzliche Bedingung, in ON eingesetzt, weil schneller als in WHERE
                      - WHERE tblB.y is NULL: nimmt bitte nur Datensätze vom bisherigen Ergebnis, wo die Bedingung zutrifft.

                      Alles klar?

                      Kommentar


                      • #26
                        ja alles klar..! ich glaube ich habe es tatsächlich kappiert..!

                        du glaubst gar nicht wie sehr ich dir danke!!!!!!!


                        lg, harry d.

                        Kommentar

                        Lädt...
                        X