Dieter: MySQL Select kreuz und quer ;-)

Hi zusammen,

ich hab ein Emailpostfach auf DB Basis in dem mehrere User nach ID getrennt sich untereinander Nachrichten schreiben können ...

Nun möchte ich gerne alle Nachrichten die sich Peter(id1) und Sandra(id2) geschrieben haben in einem Dialog darstellen ;-)

SELECT *
 FROM
     s4all_mail,s4all_user
 WHERE
     s4all_mail.to_nickID='2' AND s4all_mail.from_nickID='1'
    OR
     s4all_mail.to_nickID='1' AND s4all_mail.from_nickID='2'
 AND
     s4all_user.id=s4all_mail.to_nickID
 ORDER by
     s4all_mail.id
 DESC

Sieht nett aus oder ? ;-)

Hier steckt das Problem:

s4all_mail.to_nickID='2' AND s4all_mail.from_nickID='1'
    OR
      s4all_mail.to_nickID='1' AND s4all_mail.from_nickID='2'

Mache ich das so:

s4all_mail.to_nickID='2' AND s4all_mail.from_nickID='1'

oder auch umgekehrt dann funzt alles Prima, nützt aber nicht viel da ja dann nicht die Nachrichten von beiden Seiten da sind und kein Dialog endsteht ...

Wenn ich versuche beide zu kreuzen wie im ersten Beispiel liest er mir zwar den Dialog aus aber auch gleich eine unmenge an Nachrichten die nicht dazu gehören ....

Hab ich da vieleicht zu wenig Kenntniss von MySQL ? Oder hab ich einfach einen Denkfehler in meiner Abfrage ?

Ich danke euch für jeden Tipp ....

Viele Grüße

Dieter

  1. Guten Morgen,

    ich weiß nicht, ob's der Fehler ist, aber vielleicht hast du ein Problem mit der Bindungsstärke von AND/OR in deiner Logik - AND bindet stärker als OR, daher weiß ich im Moment nicht, ob deine Ausdruckskombination richtig anschlägt.

    Wenn du also kein JOIN benutzt, dann versuch mal die WHERE-Klausel zu klammern:
     (
         (s4all_mail.to_nickID='2' AND s4all_mail.from_nickID='1')
        OR
         (s4all_mail.to_nickID='1' AND s4all_mail.from_nickID='2')
     )
     AND
         s4all_user.id=s4all_mail.to_nickID

    MfG
    Rouven

    --

    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Heya ;-) das funzt ... besten Dank ;-)

      (
            (s4all_mail.to_nickID='2' AND s4all_mail.from_nickID='1')
           OR
            (s4all_mail.to_nickID='1' AND s4all_mail.from_nickID='2')
        )
        AND
            s4all_user.id=s4all_mail.to_nickID