我有一个SQL查询,用于从我的用户表中选择已向我所选用户发送消息或从其接收消息的用户(我的消息表中的senderID或recipientID)。
查询如下:
SELECT *
FROM users
WHERE (ID IN (SELECT DISTINCT(senderID)
FROM messages
WHERE recipientID = $userID)
OR ID IN (SELECT DISTINCT(recipientID)
FROM messages
WHERE senderID = $userID))
鉴于列sentAt
是消息的时间戳,我如何按照哪个用户发送最新消息的顺序来命令返回。我试图将ORDER BY sentAt DESC
附加到子查询,但它没有返回预期的结果。
非常感谢任何帮助。
答案 0 :(得分:2)
您似乎想要join
代替in
:
select u.*
from users u join
messages m
on u.id in (m.senderid, m.recipientid)
where u.id = $userid
order by m.sentat desc