Leidige Joins bzw Where-Klausel

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

  • Leidige Joins bzw Where-Klausel

    So, da ich nun nach stundenlangen herumfuchteln und "studieren" nicht auf meine WHERE-Klausel komme. Hier mein Problem:

    Ich hab 2 Tabellen:

    Tabelle hp_liste:
    VocId | ger | eng | unit

    Tabelle voc_made:
    VocId | UserId | right | uservoc

    So nun möchte ich das alle Vokabeln, die bei User A bereits vorkamen nicht mehr selectiert werden.

    Die funktioniert auch mit dem hier klasse...
    PHP-Code:
    SELECT *
    FROM hp_voc liste
    LEFT JOIN voc_made done ON 
    liste.VocId done.VocId )
    WHERE
    done
    .UserId IS NULL AND liste.unit '0'
    ORDER BY RAND()
    limit 0,20 
    bis ein 2 ter User dazu kommt, dann werden User A die Vokabeln, die User B schon hatte auch nicht mehr angezeigt, da der Wert, dann nicht NULL sondern, die ID von User B hat.

    Dies hab ich dann mit dem hier gelöst:
    PHP-Code:
    SELECT *
    FROM hp_voc liste
    LEFT JOIN voc_made done ON 
    liste.VocId done.VocId )
    WHERE (
    done.UserId IS NULL OR done.UserId != '1') AND liste.unit '0'
    ORDER BY RAND()
    limit 0,20 
    Das dumme daran ist nur, dass ich dadurch zwar die Vokabeln bekomme, die USER B schon bearbeitet hatte. Nur ich komm nicht drauf, wie ich jetzt die weglasse, die User A gleichzeitig auch schon bearbeitet hat.

    Ich hoffe mal, dass mein Problem verständlich geschildert ist, ich bezweifels aber

    Bedanke mich schonmal vielmals für Hilfe

    EDIT:

    sql verbessert

    Zuletzt geändert von Damian1984; 03.05.2004, 22:04.
    Für Rechtschreibfehler übernehme ich keine Haftung!

  • #2
    ich habs jetzt nicht komplett gelesen. Aber eigentlich musst Du doch nur where userID != ".$thisUser." einfügen ...
    h.a.n.d.
    Schmalle

    http://impressed.by
    http://blog.schmalenberger.it



    Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
    ... nur ohne :-)

    Kommentar


    • #3
      Bau Dir einen Array-String) mit den ID der USER deren Vokabelen nicht eingeblendet werden sollen (also in der ART "(1,3,6,8)")
      und dann ab damit in die WHERE Clause


      WHERE USERID NOT IN $arraystring
      chansel0049
      ----------------------------------------------------
      if you've reached the bottomline - dig further!
      Übersetzer gesucht? http://www.babelport.com

      Kommentar


      • #4
        Original geschrieben von schmalle
        ich habs jetzt nicht komplett gelesen. Aber eigentlich musst Du doch nur where userID != ".$thisUser." einfügen ...
        Das dumme daran ist nur, dass ich dadurch zwar die Vokabeln bekomme, die USER B schon bearbeitet hatte. Nur ich komm nicht drauf, wie ich jetzt die weglasse, die User A gleichzeitig auch schon bearbeitet hat.



        Bau Dir einen Array-String) mit den ID der USER deren Vokabelen nicht eingeblendet werden sollen (also in der ART "(1,3,6,8)")
        und dann ab damit in die WHERE Clause


        WHERE USERID NOT IN $arraystring
        Dann werden mir aber wiederum nur die Vokabeln angezeigt, die noch niemand bearbeitet hat?!

        Ich will aber nur die, die User A noch nicht bearbeitet hat.
        Für Rechtschreibfehler übernehme ich keine Haftung!

        Kommentar


        • #5
          Dann ändere den Array in (anderde USER) und WHERE in

          WHERE x IN array OR IS NULL x

          oder
          so
          chansel0049
          ----------------------------------------------------
          if you've reached the bottomline - dig further!
          Übersetzer gesucht? http://www.babelport.com

          Kommentar

          Lädt...
          X