私は必要なものは複雑ですが、やはりSQLでうまくいきません。基本的に私は会話の参加者を格納するテーブルを持っています。 2つの提供されたユーザーIDを使用して、2人の特定のユーザーのみを含む会話が存在するかどうかを判断する照会が必要です。この2つを超える追加のユーザーを含む会話はカウントしないでください。つまり、2人のユーザー間で1対1の会話のみです。ここでSQL:2つの指定された値に基づいて一致するIDを持つ2つの行を正確に選択してください
は私SQLfiddleです:http://sqlfiddle.com/#!9/284e1/33/0
そしてトリックをやっていない、私の進行中のクエリ:
SELECT * FROM mybb_conversation_participants WHERE conversation_id IN ( SELECT conversation_id FROM mybb_conversation_participants WHERE (user_id = 6 OR user_id = 11) GROUP BY conversation_id HAVING COUNT(*) = 2 );
私はHAVING COUNT(*) = 2
一部を理解してるとは思いません、このクエリは、他のユーザーがその会話内に存在する場合でも、2人のユーザーを含むすべての会話を返すためです。ここでも、2人の提供されたユーザーの間で1対1の会話だけが選択されなければなりません。それ以外の場合は、何も選択しないでください。たとえば、上記のSQLfiddleでは、conversation_id
の12
または19
の行のみが返されます。他のすべての一致には2つ以上の行が含まれるためです。
これは私がHAVING
ステートメントが行うと期待していたものですが、明らかにそうではありません。
アイデア?
申し訳ありませんが、私はあなたの編集を見た前に、私はコメントしています。これは完璧ですが、すばやく対応してくれてありがとう! –