サイト上の 2 人のユーザー間で送信されたすべてのメッセージが格納される usermessages テーブルがあります。
各メッセージにはsourceUserId
と がありfriendId
、これらは送信者と受信者です。
すべてのユーザー メッセージ受信ボックスには、送受信されたすべてのメッセージが一覧表示され、各メッセージには、そのメッセージを送受信したユーザーが表示されます。
問題
送信ユーザーと受信ユーザーをリストしているため、一部の列が間違っています。たとえば、現在のユーザーの userId が 1 の場合です。
- 送信されたメッセージの sourceUserId は 1 になります
- 受信したメッセージのfriendIdは1になります
1 つのクエリで受信トレイ全体を実行しようとすると、現在両方sourceUserId
で2 つの結合を実行する必要があり、どちらfriendId
が現在ログインしているユーザーであるかがわからないためです。
現在ログインしているユーザーのユーザー名を既に知っているので、必要なのが 1 つだけの場合に 2 つの参加を行うのは正しくないと思われますか?
mysqlクエリである種のケースを使用して、以下を効果的に達成し、毎回検索する必要があるデータの量を減らすことができるかどうか疑問に思っています..
SELECT um.message, UNIX_TIMESTAMP(um.time), um.read, user.username
FROM usermessages um
CASE
WHEN um.friendId = 1
INNER JOIN user ON um.sourceUserId = user.id
WHEN um.sourceUserId = 1
INNER JOIN user ON um.friendId = user.id
END
WHERE (um.friendId = 1 OR um.sourceUserId = 1)