これは私のMySQL DB構造です:
Recipents (id, converstation_id, user_id)
Conversations (id, user_start)
Messages (id, user_id, message, conversation_id, time)
私がやろうとしているのは、特定のユーザーによって開始されたすべての会話 ID を取得することです。または、彼は会話の 1 つの受信者です。そして、最後のメッセージで並べ替えます。
どうやってやるの?
次のクエリが機能します。REQUESTED_USER_ID
有効なユーザー IDに置き換える必要があります。2 つのサブクエリの結果を連結する SQL の UNION ステートメントに注意してください。次に、UNION の結果を別の SELECT にラップして、開始時刻による順序を実現します。
SELECT
conversation_id
FROM (
SELECT
c.id AS conversation_id,
m.time AS start
FROM Conversations c
JOIN Messages m ON m.conversation_id = c.id
WHERE c.user_start = REQUESTED_USER_ID
UNION
SELECT
c.id AS conversation_id,
m.time AS start
FROM Conversations c
JOIN Recipents r ON c.id = r.user_id
JOIN Messages m ON m.conversation_id = c.id
WHERE r.user_id = REQUESTED_USER_ID
) result
ORDER BY start DESC;