メッセージの表があります:
id
sender_id
recipient_id
私は、ユーザー (id: 1 ) のすべてのメッセージをプルし、彼が送信者または受信者のいずれかであり、彼が話していた「他の人」に参加したいと考えています。
何かのようなもの:
SELECT * FROM `message`
LEFT JOIN `user` AS u ON IF(sender_id != 1, sender_id = u.id, recipient_id = u.id)
WHERE sender_id=1 OR recipient_id=1
送信者と受信者の両方に参加しない理由は、検索対象のユーザーが既にいるためです。そのため、別の方法で言わない限り、すべてのメッセージで彼に参加するのはもったいないと思います。
このクエリは別のSOの質問から取得しましたが、まったく効率的ではないことを読んだので、より良いクエリは何でしょうか?