我有一个 usermessages 表,其中存储了站点上两个用户之间发送的所有消息。
每条消息都有一个sourceUserId
和一个friendId
,它们是发送者和接收者。
每个用户消息收件箱都列出了所有发送和接收的消息,每条消息都显示了哪个用户发送或接收了该消息。
问题
当我们列出发送和接收用户时,有些列是错误的,例如如果当前用户的 userId 是 1
- 发送的消息的 sourceUserId 为 1
- 收到的消息的friendId为1
如果我尝试用一个查询完成整个收件箱,那么我目前必须对两者进行两次连接sourceUserId
,friendId
因为我无法判断哪个是当前登录的用户。
我已经知道当前登录用户的用户名,所以当只需要一个时,有两个连接似乎不正确?
我想知道是否可以在 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)