私は最近、この投稿Thread Messagingの助けを借りて、スレッドベースのメッセージングシステムを構築しました
関係する 3 つのテーブルは次のとおりです。
member(member_id, member_userunique, and so on..)
thread_participant(thread_id, member_id)
message(message_id, message_subject, message_body, member_id, thread_id, and so on)
参加者テーブル内に次のレコードがあります
thread_id | member_id
1---------| 959
1---------| 1
1---------| 6
2---------| 959
2---------| 6
3---------| 959
3---------| 1
3---------| 6
メッセージテーブルには、次のレコードがあります(簡易版)
message_id | member_id | thread_id
1 ---------| 959 ------| 1
2 ---------| 959 ------| 2
3 ---------| 959 ------| 1
4 ---------| 959 ------| 1
5 ---------| 959 ------| 2
6 ---------| 959 ------| 3
7 ---------| 959 ------| 1
したがって、メンバー ID 959 と 1 が 2 つの異なるスレッド、つまり 3 (メッセージ [s] ID: 6) と 1 (メッセージ [s] ID: 1、3、4、7) に関与していることがわかります。
ただし、2 人のユーザーに基づいて特定のスレッドを取得するための特定のクエリに行き詰まっています。
これまでのところ、これは私が変更したクエリです
SELECT m.message_id
FROM thread_participant AS participant
INNER JOIN message AS m ON participant.thread_id = m.thread_id
WHERE participant.member_id = 1 OR participant.member_id = 959
GROUP BY participant.thread_id
上記のクエリは、このクエリの短いバージョンです
SELECT message.message_id,
message.message_title, message.message_body,
message.message_sent_date,
user.member_userunique
FROM message AS message
INNER JOIN member AS user ON message.message_author = user.memberid
WHERE
(
message.message_id IN
(
SELECT m.message_id
FROM thread_participant AS participant INNER JOIN message AS m
ON participant.thread_id = m.thread_id
WHERE (participant.member_id IN (1,959))
GROUP BY participant.thread_id
)
)
AND message.message_title != 'UNDEFINED'
ORDER BY message.message_sent_date DESC
注: 最後のクエリでは、OR 句の代わりに IN 句を使用しています。thread_id と creation_date を含む Thread テーブルなど、さらに多くのテーブルが使用されています。
誰でもこれで私を助けることができますか?どうも