SELECT Receiver, Subject, Message FROM m WHERE Sender='<your_name>'
UNION ALL
SELECT Sender, Subject, Message FROM m WHERE Receiver='<your_name>'
これは、与えられた名前と接触した名前のリストを返すだけです。このコードを操作して、送信者か受信者かを返すこともできます
編集 (コメント交換後)
これにより、探している相手が送信者か受信者かに関係なく、各会話の最後のメッセージが表示されます。コードは私の一時テーブルに基づいています。必要に応じて少し調整する必要があります。
SELECT MAX(id), conv, message FROM (
SELECT id , CONCAT(sender,'-',receiver) AS 'conversation', message FROM t
WHERE
sender = '<person>'
GROUP BY rec
UNION
SELECT id , CONCAT(rec,'-',sender) AS 'conversation', message FROM t
WHERE
rec = '<person>'
GROUP BY sender
) as t
GROUP BY convsersation, message
説明
最初のサブクエリでは、探している人が送信者であった会話ごとに最新のメッセージを取得しています。
2 番目のサブクエリは、その人が受信者であった会話の最新のメッセージの結果を返します。
CONCAT を使用して、会話をマージできるようにします
最新のメッセージである MAX(id) のみを出力するメインクエリでラップします。
問題の人が受信者か送信者かを知る必要がある場合は、サブクエリに別の列を追加できます。
SELECT MAX(id), 会話, メッセージ, タイプ FROM ( SELECT id , CONCAT(送信者,'-',受信者) AS '会話', メッセージ, '送信者' AS 'タイプ' FROM t WHERE 送信者 = '' GROUP BY rec UNION SELECT id , CONCAT(rec,'-',sender) AS 'conversation', message, 'receiver' AS 'type' FROM t WHERE rec = '' GROUP BY sender ) as t GROUP BY convsersation
(何らかの理由で、この 2 番目のクエリでコード ブロックを作成できません。誰か編集してください)