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表查询,合并结果集!
SQL查询最近聊天记录相关推荐
- MyBatis原理分析之四:一次SQL查询的源码分析
上回我们讲到Mybatis加载相关的配置文件进行初始化,这回我们讲一下一次SQL查询怎么进行的. 准备工作 Mybatis完成一次SQL查询需要使用的代码如下: Java代码 String res ...
- sql查询返回xml数据之应用【转载】
sql查询返回xml数据之应用[转载] 今天查看邮件,看到一标题Using the FOR XML Clause to Return Query Results as XML,点进去看了看,以前也是知 ...
- python查询sqlserver视图_基于odoo11上的SQL查询构建一个新的视图或模型
我正在研究一个奥多模块.在 我希望我的模块是一个"报告"大多数购买的产品(按客户).在 我已经在Odoo上创建了一个视图,但是现在,我需要按客户"过滤"这些视图 ...
- php yii orm,Yii中的sql查询的位置(或任何支持ORM的框架)?
对于使用MVC体系结构的项目,这是更多的编码风格问题. 我正在使用Yii框架开展一个项目. 每个数据库表都有它自己的模型类,可以让我充分利用Yii的活动记录. 凉. 但是现在我需要用一个复杂的逻辑和大 ...
- SQL查询语句 select 详解
查询select: 1.单表查询 2.多表查询 3.嵌套查询分类 1)单表查询 2)多表查询 A.连接查询 B.子查询 ①一般子查询 ②相关子查询*************************** ...
- php 优化sql,php – 优化此SQL查询
这个SQL查询让我感到厌恶.我没有写它,但它是我们服务器问题的一个重要原因.我愿意将它分成多个查询并通过PHP进行一些处理(比如,RAND()). $sql = "SELECT a.code ...
- SQL 查询总是先执行SELECT语句吗?你们都错了!
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 译者:无明 链接:infoq.cn/article/Oke8hgi ...
- MySQL番外篇:一条SQL查询语句是如何执行的?
在面试的过程中,有的面试官会给出一条简单的SQL查询语句,让简单说一下执行的过程. SELECT * FROM emp where age=30; 以下问MySQL的基本架构图,从中可以看出SQL语句 ...
- SQL查询语句总是先执行SELECT?你们都错了。。。
来源 | infoq.cn/article/Oke8hgilga3PTZ3gWvbg 很多 SQL 查询都是以 SELECT 开始的.不过,最近我跟别人解释什么是窗口函数,我在网上搜索"是否 ...
最新文章
- ## **scrapy+kafka+sparkstream爬取京东Iphone12评论储存数据**
- .net 裁剪图片(不压缩)
- 一文读懂 etcd 的 mvcc 实现
- Python3快速入门——(2)list和tuple(列表和元组)
- Unity二维码生成与识别
- 联想笔记本怎么进入pe系统_联想笔记本怎么进入bios设置u盘启动新方法
- 西电c1级计算机应用测试题型,西电计算机应用基础测试题
- 共探数字化安全新未来,CSA SDP2.0标准发布暨零信任技术研讨会召开
- arcgis导出的图片无效_img影像在arcgis中生成JPG图片空白求解
- java的Swing框架简介
- Python中文文本分句 sentence tokenize
- jle汇编_x86汇编指令集大全(带注释)
- 激战2怎么选最新的服务器,选哪个服好?《激战2》高玩分析各服务器进驻人数...
- mysql union update_MYSQL:union, 以及常用函数
- 还有不了解cookie的么,什么是cookie?cookie一直在用么?
- 阿里巴巴 暑假实习 笔试题(2014年3月29日)
- Pycharm terminal激活虚拟环境
- 基于springboot在线考试报名系统毕业设计源码031706
- 【算法】欧拉函数公式证明
- chap mysql借点_mysql必知必会-读书笔记(chap4-8)