聊天表:
id, sendUserID, recvUserID, content
行1: 1, 1, 2, '2号你好'
行2: 2, 1, 3, '3号你好'
行3: 3, 1, 4, '4号你好'
行4: 4, 4, 1, '我是4号,1号你好烦'
行5: 5, 2, 1, '我是2号,1号你好烦'
想做成像QQ的最近聊天列表的方式,按ID倒序排序
希望结果如下:
talkAboutUserID,content,id
2, '我是2号,1号你好烦',5
4, '我是4号,1号你好烦',4
3, '3号你好',2
------解决方案--------------------
多加了个表Users,这张表应该是有的,看下是不是符合要求。
IF OBJECT_ID('tempdb..#Users') IS NOT NULL
BEGIN
DROP TABLE #Users;
END
GO
CREATE TABLE #Users
(
Id INT IDENTITY(1, 1)
NOT NULL
PRIMARY KEY ,
Name VARCHAR(50) NOT NULL
);
GO
INSERT INTO #Users
VALUES ( 'zhangsan' ),
( 'lisi' ),
( 'wangwu' ),
( 'zhaoliu' );
GO
IF OBJECT_ID('tempdb..#Messages') IS NOT NULL
BEGIN
DROP TABLE #Messages;
END
GO
CREATE TABLE #Messages
(
id INT IDENTITY ,
sendUserID INT ,
recvUserID INT ,
content VARCHAR(100)
);
GO
INSERT INTO #Messages
VALUES ( 1, 2, '我是3号,2号你好' ),
( 1, 3, '3号你好' ),
( 1, 4, '4号你好' ),
( 4, 1, '我是4号,1号你好烦' ),
( 2, 1, '我是2号,1号你好烦' ),
( 3, 2, '我是3号,2号你好' );
GO
SELECT *
FROM #Users;
SELECT *
FROM #Messages;
GO
/*
查询标识为1的用户和其它用户的最后聊天记录;
*/
DECLARE @id INT = 1;
SELECT t.*
FROM #Users AS u
CROSS APPLY ( SELECT TOP 1
*
FROM #Messages AS m
WHERE ( u.Id = m.sendUserId
OR u.id = m.recvUserID
)
AND ( m.sendUserID = @id
OR m.recvUserID = @id
)
ORDER BY id DESC
) AS t
WHERE u.id <> @id
ORDER BY t.id DESC;
GO