如图,
listID : 主键 自增长
contetn: 私信内容
date: 发送日期
receiver:接受者ID(即用户ID)
sender: 发送者ID(即用户ID)
time: 发送时间
现在给你一个用户ID,要求查出这个用户的所有私信,(只是与谁发过私信,类似页微信的聊天类表页,只显示与谁有过私信,可以是你发给别人的,也可以是别人发给你的)
我写了个这个:
SELECT * FROM table_name
WHERE sender=2 OR receiver=2
GROUP BY sender,receiver
ORDER BY DATE DESC,TIME DESC
查处来的结果是:
可以看到有重复数据,比如第一条和第四条,3发私信给2,和2发私信给三,应该按时间最新只取一条记录
求大神给个SQL,多谢!!!
可以用distinct receiver+sender过滤掉一样的。具体用法自己找找。
为什么要存两条呢?每一次内容只存一条数据不就行了吗?
如果你认为sender,receiver颠倒一致是同一条记录的话,可以下面这么写,
select * from table_name where LISTID in(
SELECT LISTID FROM (
SELECT LISTID,TIME,sender AS S,receiver AS R,ROW_NUMBER() over(partition by s,r order by TIME) TRNUM FROM (
SELECT LISTID,TIME,sender AS S,receiver AS R FROM table_name WHERE sender=2
UNION
SELECT LISTID,TIME,receiver AS S,sender AS R FROM table_name WHERE receiver=2
) A
) WHERE TRNUM=1
) ORDER BY DATE DESC,TIME DESC
楼主,这个问题怎么解决的呢?我也遇到这样的问题了
select * from table order by limit 1