【问题标题】:SQL query for getting message users in order of last message按最后一条消息的顺序获取消息用户的 SQL 查询
【发布时间】:2018-04-23 03:39:32
【问题描述】:

我有一个 SQL 查询,它从我的用户表中选择已向我选择的用户发送消息或从我选择的用户接收消息的用户(我的消息表中的发件人 ID 或收件人 ID)。

查询如下:

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 附加到子查询中,但它没有返回预期的结果。

任何帮助将不胜感激。

【问题讨论】:

  • 这适用于哪个 RDBMS?请添加标签以指定您使用的是mysqlpostgresqlsql-serveroracle 还是db2 - 或其他完全不同的东西。
  • 请提供样本数据和期望的结果。
  • 抱歉,我编辑了标签以反映它是 mysql。

标签: mysql sql


【解决方案1】:

您似乎想要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

【讨论】:

  • 我正在寻找一个 JOIN,你的回答与我需要的有点不同,因为它只返回了我正在搜索相关消息的用户,但经过一些细微的调整,它工作得很好。如果有人感兴趣,我的最终代码如下所示:SELECT * FROM users AS u INNER JOIN messages AS m ON u.ID IN (m.senderID, m.recipientID) WHERE u.ID <> $userID GROUP BY u.ID ORDER BY m.sentAt DESC
猜你喜欢
  • 2012-10-16
  • 1970-01-01
  • 2013-06-13
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 2017-05-24
  • 2016-10-12
  • 2018-01-15
相关资源
最近更新 更多