登录 立即注册

首页 > 绿虎论坛 > 建站 > 讨论/求助 (发帖)

标题: 请教sqlserver问题

作者: @Ta

时间: 2023-11-25

点击: 7965

表News,主要字段有id,fid,sid,del,time.等等
这是一个网站内信的表,老式的表都是一条一条的,想改成类似微信聊天这种,有聊天就合并为一个聊天,但是懒得做会话表,就这样进行去重查询
收件:根据sid去重,保留最新一条where n.Sid = 2
发件:根据fid去重,保留最新一条where n.Fid = 2
尝试了很多次,根据AI的解答得出以下方案,有没有懂的大佬看看有问题吗,或者可以优化一下

SELECT *,(select nickname from user as C where n.Sid = C.Id) as nick
from
( SELECT *, ROW_NUMBER() OVER (PARTITION BY Sid, Fid ORDER BY Time desc) AS RowNum FROM News where del=0) AS n
where
n.Sid = 2 AND n.RowNum = 1 and  n.del=0

[隐藏样式|查看源码]


『回复列表(5|隐藏机器人聊天)』

1.

@echo醉老仙,意思是《如何从 News 表中,找出 fid=x, sid=y, del=0, time 最大 的一条数据》吗?

若是,这样好像简单些?(需要 sid、fid、del、time 索引)

SELECT id
FROM News
WHERE fid=x, sid=y, del=0
ORDER BY time DESC
LIMIT 1
(/@Ta/2023-11-25 16:21//)

2.

@无名啊,以往的论坛聊天消息,每条消息都单独显示,打开消息,一个人发10条消息给我,就显示了十条,我现在需要合并,类似微信聊天
因此目标是,对于收件箱,查询所有的sid,排除重复,返回数据

(/@Ta/2023-11-25 17:16//)

3.

@echo醉老仙,是说,根据聊天对象分组,并显示最后消息时间?

打开与某人的聊天界面时,则按时间显示所有历史记录?

(/@Ta/2023-11-25 20:16//)

4.

@无名啊,谢谢,不过并非如此,我的意思是合并消息
即使是现在的林子依然沿用了旧版wap的内信模式,不是吗

  • 另外我的是sqlserver,不是mysql
  • 以下图片仅供参考
    screenshot20231126.png(118.48 KB)
(/@Ta/2023-11-26 10:20//)

5.

@echo醉老仙,那就是,按照发件人分组,取最后发消息时间、消息总数?

SELECT MAX(time) AS 最新一条消息时间, COUNT(*) AS 该发件人历史消息数
FROM News
WHERE 收件人ID = 自己 AND del = 0
GROUP BY 发件人ID
(/@Ta/2023-11-27 23:00//)

回复需要登录

12月13日 16:10 星期五

本站由hu60wap6华为CPU驱动

备案号: 京ICP备18041936号-1