私信 sql 查询列表结果对不上
字段说明:
id:私信主键,自增
user_id:私信的主人
friend_id:对方的id
sender:发送者
receiver:接受者
type:类型(normal 和 system)
content:内容
send_time:发送时间
read_time:阅读时间
status:私信状态(已读 和 未读)
借鉴oschina的留言来做:(冗余来换性能的思路)
一条私信保存两条记录,因为每个人都有收到的私信和已发送私信,当发送人删除了已发送私信,不会影响到接收人查看收到的私信。
假如,当 A 给 B 发送一条私信时,会往表中插入两条相同的记录,唯一不同的是 user 和 friend 这两个字段的值是对调的,当然 id 因为是自增长的所以也不同。
记录1. user_id=A,friend_id=B,sender=A,receiver=B
记录2. user_id=B,friend_id=A,sender=A,receiver=B
其实目的就是:
1:在私信列表展示我私信他人和他人私信我的列表,并显示最新的一条私信信息
2:为了跟微博私信那种方便在界面显示对话,说了这么多最终的问题是在私信列表展示查询遇到了问题,写了一段sql,但是最终的结果往往对不上,在此我贴上我的sql,希望的前辈们帮助小弟下。在此谢过!
sql:
select s.id, count(distinct(s.friend_id)), s.sender, s.receiver, s.user_id,
s.friend_id, s.content, s.send_time, s.`name`, s.head_url from (select sm.id, sm.sender, sm.receiver, sm.user_id, sm.friend_id,
sm.content, sm.send_time, ud.name, ud.head_url from ss_secret_msg as sm left join ss_user_data as ud on sm.user_id = ud.id
where sm.user_id = 139 order by sm.send_time asc) as s group by s.friend_id
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这个问题,简化下就是 分组保留最新一条数据的问题;
在你的sql 基础上 只要把 asc 改成desc 就可以了。 另外可以把按照时间排序,改为用id排序。时间最大的其实也就是id最大的。