mysql - 如何从基于 2 列的表中获取最新行并且不相互冲突?
问题描述
这基本上是我正在创建的另一个系统的私人消息系统。我有一个设置了 id、发送器、接收器、消息的表。发射器和接收器是数字。
当前系统已设置为每个用户都有自己的唯一编号。当他们向另一个用户发送消息时,它会将其插入表中。这样,发射器和接收器将具有用户的两个值。
我想向用户显示他们发送的每个号码,并显示他们对话中的最后一条消息(其他一切都很好,就像显示单个对话中的所有消息一样),无论是来自该用户还是其他用户。
我知道这可能没有很好地解释它,所以我会尝试使用一个例子
发射器,接收器,消息
456, 123, Hi!
456, 789, I have a question
456, 789, Can you help?
789, 456, Yes
因此,在示例中,我们有 123、456、789。为此,我们将是 456。在我们这边,我们应该看到 123、789。123 的最新消息应该是 Hi!最新的 789 应该是 Yes。如果我们要回复 789,我们的消息将是最新的,或者如果 123 回复了,那么这将是 123 对话的最新消息。
我希望我能够解释一切,并希望这个例子有所帮助。
解决方案
AUNION
听起来像你会发现有用的东西:
SELECT * FROM (
SELECT *
FROM (
SELECT *
FROM `phone_messages`
WHERE `transmitter` = ###
ORDER BY `time` DESC
LIMIT 1
) AS `last_sent`
UNION
SELECT *
FROM (
SELECT *
FROM `phone_messages`
WHERE `receiver` = ###
ORDER BY `time` DESC
LIMIT 1
) AS `last_received`
) AS `last_message`
ORDER BY `time` DESC
LIMIT 1
第一段将为您提供相关人员 ID 发送的最后一条消息。
第二部分将为您提供相关人员 ID 收到的最后一条消息。
外部选择为您提供这两者中的最新选择。
推荐阅读
- javascript - 将文档保存到 mongoDB 以防止重复
- maven - intelliJ“加载 maven 更改”与 maven 生命周期
- c++ - C++ 有助于理解低级代码的语法
- oauth-2.0 - 在 Postman 的 Jmeter 中添加 Auth2.0 以生成 Token
- sql - 对多列的唯一约束是否在每列上创建索引
- javascript - 反应组件:如何从道具中设置仅键属性?
- android-studio - Android Studio Room 查询以获取随机的 db 行并将第 2 列的行保存在变量中
- ios - 如何在 Xcode 中修复这个颤动的 iOS 错误?
- css - 如何防止 div 的文本扩展表单宽度?
- documentation - 记录文件命名约定