[SQL allgemein] SELECT aus 2 Tabellen

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

  • [SQL allgemein] SELECT aus 2 Tabellen

    hallo,
    mein problem ist folgendes:
    ich habe 2 tabellen, in der einen stehen die daten zu einem bild:
    bildid, userid, bewertung

    in der anderen stehen die user, die bewertet haben:
    bildid, userid, uhrzeit

    nun hab ich ein SELECT:
    Code:
    $sql = $db->query("SELECT bildid, userid, bewertung FROM abc1_bilder WHERE bildid>=0  LIMIT $number, 2");
    wie bekomme ich es hin, dass er aus der 2.Tabelle zusätzlich prüft, ob die bildid vom user der bewertet hat drinsteht und diese nicht mit auswählt?

    müsste doch was mit Left join sein, bekomme es aber nicht hin.
    Code:
    $sql = $db->query("SELECT a.*, b.* FROM abc1_bilder a LEFT JOIN abc1_bilder_bewertet b 
    WHERE a.bildid>=0 AND ############## LIMIT $number, 2");

  • #2
    Indem man die "WICHTIG"-Themen auch mal liest, denn wie man sieht steht da unter anderem:

    JOINS - das leidige Thema (mehrere Tabellen abfragen)
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      Das Problem ist nicht gerade verständlich gestellt. Eigentlich reicht eine Tabelle:
      bildid, userid, bewertung, uhrzeit .

      Das aus zwei Tabellen zu bekommen, geht so:
      SELECT a.*, b.* from tab1 a, tab2 b WHERE a.bildid=b.bildid and a.userid=b.userid limit $number,2

      Falls Du aber haben möchtest, welche user welche Bilder noch nicht bewertet haben, ... braucht es tatsächlich ein left join. Das steht dann im mysql_manual unter SELECT .. JOIN SYNTAX ..LEFT JOIN.

      Kommentar


      • #4
        Original geschrieben von aasejh
        Das Problem ist nicht gerade verständlich gestellt. Eigentlich reicht eine Tabelle:
        bildid, userid, bewertung, uhrzeit .


        reicht glaub ich nicht, da die userid die in der ersten tabelle steht die userid des besitzers des bildes ist.
        in der zweiten tabelle steht die userid des users, der das bild bewertet hat.

        Original geschrieben von aasejh
        Falls Du aber haben möchtest, welche user welche Bilder noch nicht bewertet haben, ... braucht es tatsächlich ein left join. Das steht dann im mysql_manual unter SELECT .. JOIN SYNTAX ..LEFT JOIN.
        genau das brauche ich, bekomme es aber nicht hin.

        hier noch mal ein Beispiel, wie ich es meine:
        es gibt 5 bilder, die zu bewerten sind.
        user (userid=5) bewertet das erste bild (von userid 1 mit der bildid=100)
        userid (des bewerters, also 5), bildid (des bewerteten bildes, also 100) und uhrzeit werden in die 2.tabelle geschrieben.

        dann wählt er mittels der select (s.o.) wieder alle 5bilder aus.
        er soll aber die 2.tabelle prüfen und erkennen: user 5 hat bild 100 bewertet
        dieses bild soll nun nicht mehr ausgewählt werden, sondern nur die 4 anderen

        Kommentar


        • #5
          bekomme ich nicht hin? Was ist denn dein konkretes problem?

          Kommentar


          • #6
            [Gegeben:
            ich habe 2 tabellen, in der einen, abc1_bilder , stehen die daten zu einem bild:
            bildid, userid, bewertung

            in der anderen, abc1_bilder_bewertet, stehen die user, die bewertet haben:
            bildid, userid, uhrzeit]


            Code:
            SELECT 
                a.bildid bildid, a.userid ownerid, a.bewertung punkte,
                b.userid bewerter
            FROM 
                abc1_bilder AS a
            LEFT JOIN 
                abc1_bilder_bewertet  AS b ON a.bildid=b.bildid AND b.userid='$userid'
            WHERE
                a.bildid>=0 AND b.userid IS NULL
            LIMIT $number,2
            Erklärung: Du ergänzt die tabelle a mit den Bewertungen durch user '$userid'.
            mysql liefert Dir bei left join sql-NULL-Werte, wenn es keine Bewertung gibt, worauf Du mit IS NULL prüfst
            (b.userid = NULL wäre unrichtig).

            wozu dein a.bildid>=0 gut sein soll, ist mir unklar geblieben.

            Kommentar


            • #7
              @phoenix28:

              Hör jetzt bitte endlich auf, dir immer wieder neue Accounts zu registrieren!

              Einer deiner Hase-Accoutns wurde nicht gebannt - also wieso zum Geier nutzt du den nicht weiter, sondern legst dir alle Nase lang einen neuen an?

              Wenn du damit weitermachst, werden zukünftig nicht nur die Accounts gebannt, sondern auch die Postings gelöscht.

              EDIT:
              by Tobiaz: Dein einziger(!) aktiver account heißt jhaase.
              Zuletzt geändert von TobiaZ; 30.08.2006, 15:52.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Benutzer: 36,550, Themen: 72,821, Beiträge: 472,911

                der durchschnitts-Nick bleibt 12 Beiträge lang bestehen, und macht 2 Themen . Warum sollte ich nach 50-100 Beiträgen nicht auch wechseln? Vor allem weil ich ja sowieso rausfliege.. siehe vorangehender post.

                Kommentar


                • #9
                  Benimm dich einfach, dann verstehen wir uns schon.

                  Kommentar

                  Lädt...
                  X