SQL查询最近聊天记录

大学的时候没有好好学习SQL,现在遇到SQL就头痛,一个简单的SQL就要写半天,效率低下!

好友聊天记录

我要查询最近的私聊或者群聊的聊天记录,将相应的信息显示出来,和微信的好友聊天记录一样!

相关表

Record

Record,用来记录私聊或者群聊的消息记录表,私聊时userId为对方的userId,groupId为空,群聊时groupId不为空,userId为发送方的userId(也就是说groupId是否为空来区分私聊或者群聊)

private Long userId;
//false发送  true接收
private Boolean orientation;
private Integer type;
private String content;
private java.util.Date eventTime;
private java.util.Date receiveTime;
private Long groupId;
private String uniqueId;
..........

Contact表

Contact是联系人表,包括联系人的userId(主健),姓名,电话,昵称,部门id等等信息!

private Long userId;
private String name;
private Long number;
private Long stickyTime;
private String deptId;
.......

Friend表

Friend表是好友表,用户的添加好友信息都入这个表!

private Long userId;
private String name;
private Long number;
private String comments;
..............

现在需要查询聊天记录,显示群名称,对方名称,消息时间,消息内容,头像等信息,需要查新上面的3个表!

SQL

私聊SQL

查询某个人的消息记录,对方mUserId以及自己的ownUserId是已知的.

    StringBuffer sbSql = new StringBuffer();

    sbSql.append("select b.[_id] as RECORD_ID, b.ORIENTATION, b.[USER_ID] as USER_ID, c.[NUMBER] as USER_NUMBER, c.[NAME] as NAME, c.[COMMENTS] as COMMENTS, b.[TYPE] as TYPE, b.[CONTENT] as CONTENT, b.[EVENT_TIME] as EVENT_TIME, b.[RECEIVE_TIME] as RECEIVE_TIME, b.[STATUS] as STATUS, b.[GROUP_ID] as GROUP_ID,'-1' as GROUP_TYPE"); sbSql.append(" (case when b.[orientation] = '0' then " + ownUserId + " when b.[orientation] = '1' then b.[USER_ID] end) as USER_ID"); sbSql.append(" from record b, (select * from contact union select * from friend) c where b.group_id is null and b.[USER_ID]=c.[USER_ID]"); sbSql.append(" and c.[USER_ID]=' "); sbSql.append(mUserId); sbSql.append(" '"); // 后面可以加一些限制条件,比如某个时间段....

上面的SQL我分成了3段,我们一段一段的看:
第一段:
主要是列出我们需要查询的字段,不用多讲!
第二段:
这里有个case…when条件,userId记录发送方,意思是当我是接收方,那个userId就是对方的,我是发送方userId就是自己的(userId是另外一个表的主键)!
第三段:
查询Record表不够我们需要的字段,需要联表查询,通过union关键字合并Record b,和这里的c的结果集!最后面就是加了一些查询条件限制!

群聊SQL

群聊的SQL与私聊的大同小异了,也就是传一个groupId,不同的是群名称就不是在Friend与Contact表里面去找了,通过union联系Group表查询,合并结果集!

    原文作者:永远的红姐
    原文地址: https://blog.csdn.net/itheimach/article/details/54629265
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞