0

現在、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 クエリ自体の中でこの交差を行う方法はありますか?

前もって感謝します、ベン

4

2 に答える 2

2

このクエリを試してみてください:

SELECT threads.id
FROM threads 
INNER JOIN thread_user ON thread_user.thread_id = threads.id
INNER JOIN messages ON messages.thread_id = threads.id
WHERE thread_user.user_id = 1
AND threads.draft = false
AND messages.user_id != 1

INNER JOINは、条件「thread_user.thread_id = threads.id」に基づいて2つのテーブル間の交差を「ON」にします

最初のクエリはスレッド間の交差点を示し、thread_user --> table_1 として、2 番目のクエリはスレッド間の交差点を示し、メッセージ --> table_2 として

私がしたことは、単にメッセージ間の交差を取得することであり、table_1 はスレッド間の交差であり、thread_user-

2 つのクエリから条件を収集し、新しいクエリに追加します。

于 2013-11-13T12:36:26.797 に答える