Mal wieder ein Schleifen/Abfragen-Problem

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

  • Mal wieder ein Schleifen/Abfragen-Problem

    Bei der weiteren Arbeit mit meiner Datenbank habe ich jetzt ein neues Problem. Ich habe weiterhin die Tabellen Foto (mit FotoNr[Primärschlüssel], Titel, ...), Nutzer (mit NutzerNr[Primärschlüssel], Name,....) und Bewertet(mit FotoNr, NutzerNr, Note,...)
    Jeder Nutzer kann natürlich in der Tabelle Bewertet in Kombination mit jedem beliebigen Bild auftauchen.
    Ich will jetzt aber wissen, welcher Nutzer welches Bild noch NICHT bewertet hat.
    Ich habe mir hier ein Schleifensystem entwickelt, wo ich dachte, dass das schonmal eine Basis ist. Aber bei dem letzten MYSQL-Befehl weiß ich, dass er falsch ist, ich habe aber keine Ahnung, wie ich das machen könnte. Kann mir da vielleicht mal wieder jemand helfen?


    PHP-Code:
    $query1="SELECT NutzerNr FROM Nutzer";
    $result1=mysql_query($query,$connection);
    echo 
    "<table border=1 align=left><tr><td>Nutzer und die von Ihnen noch nicht bewerteten Fotos:</td></tr>";
    echo 
    "<th>";
    echo 
    "NutzerNr";
    echo 
    "</th>";
    echo 
    "<th>";
    echo 
    "FotoNr";
    echo 
    "</th>";
    while (list(
    $NutzerNr)=mysql_fetch_row($result1))
        {
        
    $query2="SELECT FotoNr From Foto";
        
    $result2=mysql_query($query2,$connection);
             while (list(
    $FotoNr)=mysql_fetch_row($result2))
                 {
                     
    $query3="SELECT Nutzer.NutzerNr, Foto.FotoNr FROM Nutzer,  Bewertet, Foto WHERE Bewertet.NutzerNr not in ($NutzerNr) AND Bewertet.FotoNr not In ($FotoNr)";
                     
    $result3=mysql_query($query3,$connection);
                     
    $spaltenzahl=mysql_num_fields($result3);
                       while (
    $a=mysql_fetch_row($result3))
                    {
                                     echo 
    "<tr>";
                       for (
    $i=0;$i<$spaltenzahl;$i++)
                                         {
                             echo 
    "<td>".$a[$i]."</td>";
                                             }
                                     echo 
    "</tr>";
                    }
                     }
              }
    echo 
    "</table>"
    Vielen Dank an die ganzen engangierten User hier!

  • #2
    schau dir mal http://www.php-resource.de/forum/sho...threadid=28292 an
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      ja, hier hatte ich auch schon geguckt, hatte mir aber von daher nicht direkt weitergeholfen, weil es bei mir ja im Prinzip so ist, dass ich in der Mitte eine Tabelle habe (Bewertet) und links und rechts davon jeweils eine Tabelle habe (Nutzer und Foto). Jetzt will ich ja gucken, welche Werte links und
      rechts existieren, aber nicht in der Mitte. Und da kam ich irgendwie mit den Left- und Right-Joins nicht weiter. Oder gibt es sowas wie ein "Doppel-Left-Join", also wo ich irgendwie zwei Tabellen nach
      links gehe?
      Wenn es andersrum wäre, dass ich in der Mitte überall Werte hätte und würde wissen wollen, zu welchem Tupel es links bzw. rechts keine Werte gibt, würde ich es ja können, aber so herum leider nicht.
      Und nochmal eine ganz blöde Frage dazu:
      Wodurch ergibt sich eigentlich genau das links und rechts??

      Ich hatte mir jetzt sowas hier überlegt, aber das geht schon von der Syntax her nicht:
      PHP-Code:
      SELECT Nutzer.NutzerNrFoto.FotoNr 
      FROM Bewertet 
          RIGHT JOIN Nutzer USING 
      (NutzerNr
          
      LEFT JOIN Foto USING (FotoNr
      WHERE Bewertet.NutzerNr IS NULL AND Foto.FotoNr IS NULL 
      Danke

      Kommentar


      • #4
        Oder gibt es sowas wie ein "Doppel-Left-Join", also wo ich irgendwie zwei Tabellen nach
        du kannst auch 18 tabellen nach links gehen (na gut, mit 6 hab ichs schon probiert ) ....

        versuch macht kluch
        Die Zeit hat ihre Kinder längst gefressen

        Kommentar


        • #5
          Ja, nett zu wissen, dass es geht, aber ich weiß eben nicht wie!
          Ich hatte ja gedacht, dass das funktionieren könnte, wie ich das gemacht habe (nicht dieses Schleifensystem, sondern nur die MYSQL-Abfrage, wie ich sie in dem 3. Beitrag hier beschrieben habe, dass das mit den Schleifen Mist ist, hab ich mittlerweile auch eingesehen)
          Ich habe einfach zu wenig Ahnung von dem ganzen Herumgejoine, als dass ich das so einfach machen könnte.
          Daher wäre es schön, wenn mir jemand eine konkrete Antwort geben könnte.

          Kommentar


          • #6
            Ich habe einfach zu wenig Ahnung von dem ganzen Herumgejoine, als dass ich das so einfach machen könnte.
            ach, wenn ich nicht so faul wär, könnt ich aus deinen infos auch deine tabellen struktur entnehmen ... wenn sich keiner mehr bewegt, und du lust hast, post mal bitte nen entsprechenden tabellen-dump und eine klare, kurze aussage, was du erfragen möchtest ...

            dicke joins lassen sich am einfachsten mit php_my_admin zusammenbasteln (recht mehrdeutig, löl), solange versuchen, bis es geht. bei fehler erhälts du ne entsprechende meldung bzw. ein resultat, dem du ansiehst, was falsch gequeriet wurde ...

            edit: wieso ist der syntax falsch? sieht doch gut aus? ähm, statt using mußt du vielleicht ON nehmen, weil USING afaik doch nur die übereinstimmungen nimmt (NULL fliegt gleich raus), so daß du im WHERE garnicht mehr drauf abfragen kannst ... ich weiß es nicht *g
            Zuletzt geändert von derHund; 06.06.2004, 11:03.
            Die Zeit hat ihre Kinder längst gefressen

            Kommentar


            • #7
              @ DerHund: Nochmal eine kurze Beschreibung:

              3 Tabellen

              Tab Nutzer (NutzerNr,....) [NutzerNr ist Primärschlüssel]
              Tab Foto (FotoNr,....) [FotoNr ist Primärschlüssel]
              Tab Bewertet (NutzerNr, FotoNr, Note,....)

              Gesucht sind die Nutzer, die zu einem oder mehreren Fotos noch keine Bewertung abgegeben haben.
              Ausgegeben werden NutzerNr und von Ihnen nocht nicht bewertete FotoNr.


              Auch wenn ich das mit dem Using ändere, kommen Fehlermeldungen. Ich hatte es jetzt so:

              PHP-Code:
              SELECT Nutzer.NutzerNrFoto.FotoNr 
              FROM Nutzer 
                  LEFT JOIN Bewertet on Nutzer
              .NutzerNr=Bewertet.NutzerNr  
                   Foto LEFT JOIN Beweret on Foto
              .FotoNr=Bewertet.FotoNr 
              WHERE Bewertet
              .NutzerNr IS NULL AND Foto.FotoNr IS NULL 

              Kommentar


              • #8
                kleiner Tippfehler in dem Befehl:
                es heißt

                PHP-Code:
                SELECT Nutzer.NutzerNrFoto.FotoNr 
                FROM Nutzer 
                      LEFT JOIN Bewertet on Nutzer
                .NutzerNr=Bewertet.NutzerNr  
                         Foto LEFT JOIN Bewertet on Foto
                .FotoNr=Bewertet.FotoNr 
                WHERE Bewertet
                .NutzerNr IS NULL AND Foto.FotoNr IS NULL 

                Kommentar


                • #9
                  Nochmal eine kurze Beschreibung: 3 Tabellen
                  danke fürs dumpen!

                  Auch wenn ich das mit dem Using ändere, kommen Fehlermeldungen. Ich hatte es jetzt so:
                  wenn du nur ein äquivalent benutzt, wird sich wohl nix ändern

                  Code:
                  SELECT 
                    n.NutzerNr, 
                    f.FotoNr
                  FROM 
                    test_nutzer n, test_fotos f
                  LEFT JOIN 
                    test_bewertet b
                  ON 
                    n.NutzerNr = b.NutzerNr 
                  AND 
                    f.FotoNr = b.FotoNr
                  WHERE 
                    b.NutzerNr IS NULL
                  ORDER BY 
                    n.NutzerNr, 
                    f.FotoNr
                  works as desired*

                  EDIT:
                  * mit der von mir erstellten tabellen-struktur, die deiner ähneln sollte
                  Zuletzt geändert von derHund; 06.06.2004, 12:32.
                  Die Zeit hat ihre Kinder längst gefressen

                  Kommentar


                  • #10
                    Super! Vielen Dank DerHund!

                    Ich wusste leider nicht, was der Tabellen-dump ist, daher konnte ich es dir nur so beschreiben.

                    Kommentar


                    • #11
                      Ich wusste leider nicht, was der Tabellen-dump ist, daher konnte ich es dir nur so beschreiben.
                      *g, hat ja auch so geklappt

                      wenn du im php_my_admin mal auf export klickst, kannst du dort deine tabelle exportieren, dumpen, einen tabellen-dump erstellen ...
                      Die Zeit hat ihre Kinder längst gefressen

                      Kommentar

                      Lädt...
                      X