1

これは私のMySQL DB構造です:

Recipents (id, converstation_id, user_id)

Conversations (id, user_start)

Messages (id, user_id, message, conversation_id, time)

私がやろうとしているのは、特定のユーザーによって開始されたすべての会話 ID を取得することです。または、彼は会話の 1 つの受信者です。そして、最後のメッセージで並べ替えます。

どうやってやるの?

4

1 に答える 1

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;
于 2013-01-09T01:17:53.367 に答える