【问题标题】:mysql select groupby 2 columnsmysql选择2列分组
【发布时间】:2015-07-31 01:05:57
【问题描述】:

MySQL

表格消息

|来自用户 |到用户 |留言 |时间 | 1 | 2 |你好? | +1 | 2 | 1 |你好! | +2 | 1 | 3 |那里? | +3 | 3 | 1 |是 | +4 | 2 | 3 |嘿| +5 | 3 | 2 |苏? | +6 | 1 | 2 | :) | +7 | 1 | 4 |谢谢 | | 4 | 1 |欢迎 |

我需要查询最新消息

我得到的最接近的是

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 | 

它返回最新的 from 和最新的 to。

我想要的是

|来自用户 |到用户 |留言 |时间 | 3 | 1 |是 | +4 | 1 | 2 | :) | +7 | 4 | 1 |欢迎 |

user1 的最新消息,例如聊天列表的工作方式。

【问题讨论】:

  • 什么是'+'?摆脱它
  • 不是实际数据.. 只是显示哪个 1 在后面..

标签: mysql


【解决方案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 |
+----------+--------+---------+------------+

【讨论】:

    猜你喜欢
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 2012-06-30
    • 2014-02-07
    • 2010-11-04
    • 1970-01-01
    相关资源
    最近更新 更多