現在、mysql を使用してメッセージング システムを実装しようとしています。これまでの私のスキーマは、threads、thread_user、messages、message_read というテーブルで構成されています (スレッド メッセージング システム データベース スキーマの設計で詳しく説明されています) 。ユーザーが所属しているスレッドの数が必要ですが、投稿したのはそのユーザーだけではありません。まず、次のクエリを使用して、ユーザーが属するスレッドのリストを見つけることができます。
SELECT threads.id
FROM threads INNER JOIN thread_user ON thread_user.thread_id = threads.id
WHERE thread_user.user_id = 1
AND threads.draft = false
次に、メイン ユーザー以外のユーザーが投稿したスレッドのリストを見つけることができます。
SELECT threads.id
FROM threads INNER JOIN messages ON messages.thread_id = threads.id
WHERE messages.user_id != 1
スレッドには少なくとも 1 つのメッセージが含まれている必要があるため、これら 2 つのサブクエリの共通部分を見つけることで、ユーザーが所属し、投稿したのはユーザーだけではないスレッドのリストを見つけることができます。
たとえば、ユーザーが属するスレッドを示す最初のクエリは 3、7、10、12 を返し、メイン ユーザー以外のユーザーが投稿したスレッドのリストを示す 2 番目のクエリは 1 を返します。 2, 3, 4, 5, 6, 7, 8, 9, 11. 次に、2 つのセットの交点を使用して、スレッド 3 と 7 はユーザーが属しているスレッドであり、ユーザーだけではないスレッドであると判断できました。スレッドに投稿しました。
mysql クエリ自体の中でこの交差を行う方法はありますか?
前もって感謝します、ベン