的MySQL
表格消息
| fromuser | toUser | message | time | 1 | 2 | Hi? | +1 | 2 | 1 | Hello! | +2 | 1 | 3 | There? | +3 | 3 | 1 | Yes | +4 | 2 | 3 | Hey | +5 | 3 | 2 | Sup? | +6 | 1 | 2 | :) | +7 | 1 | 4 | thanks | | 4 | 1 | welcome |
我需要查询最新消息
我得到的最近的是
SELECT * FROM (SELECT * FROM Messages WHERE fromUser=1 OR toUser=1 ORDER BY time DESC) AS msg GROUP BY fromUser,toUser
结果:
| fromuser | toUser | message | time
| 2 | 1 | Hello! | +2
| 1 | 3 | There? | +3
| 3 | 1 | Yes | +4
| 1 | 2 | :) | +7
| 1 | 4 | thanks |
| 4 | 1 | welcome |
它返回最新的和最新的。
我想要的是
| fromuser | toUser | message | time | 3 | 1 | Yes | +4 | 1 | 2 | :) | +7 | 4 | 1 | welcome |
来自user1的最新内容,就像聊天列表的工作方式一样。
答案 0 :(得分:1)
OP正在寻找给定用户参与的每个对话的最新消息。
可能有一个更优雅的解决方案,但这是一种方式......
请注意,我的数据集有代理PK ...
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(fromuser INT NOT NULL
,toUser INT NOT NULL
,message VARCHAR(20) NOT NULL
,message_id INT NOT NULL PRIMARY KEY
);
INSERT INTO my_table VALUES
(1,2,'Hi?',1),
(2,1,'Hello!',2),
(1,3,'There?',3),
(3,1,'Yes',4),
(2,3,'Hey',5),
(3,2,'Sup?',6),
(1,2,':)',7),
(1,4,'thanks',8),
(4,1,'welcome',9);
SELECT a.* FROM my_table a
JOIN
(
SELECT MAX(message_id) message_id FROM
(
SELECT toUser correspondent,message,message_id FROM my_table WHERE fromuser = 1
UNION
SELECT fromuser,message,message_id FROM my_table WHERE touser = 1
) x
GROUP BY correspondent
) b
ON b.message_id = a.message_id;
+----------+--------+---------+------------+
| fromuser | toUser | message | message_id |
+----------+--------+---------+------------+
| 1 | 2 | :) | 7 |
| 3 | 1 | Yes | 4 |
| 4 | 1 | welcome | 9 |
+----------+--------+---------+------------+