大学的时候没有好好学习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查询最近聊天记录相关推荐

  1. MyBatis原理分析之四:一次SQL查询的源码分析

    上回我们讲到Mybatis加载相关的配置文件进行初始化,这回我们讲一下一次SQL查询怎么进行的. 准备工作 Mybatis完成一次SQL查询需要使用的代码如下: Java代码   String res ...

  2. sql查询返回xml数据之应用【转载】

    sql查询返回xml数据之应用[转载] 今天查看邮件,看到一标题Using the FOR XML Clause to Return Query Results as XML,点进去看了看,以前也是知 ...

  3. python查询sqlserver视图_基于odoo11上的SQL查询构建一个新的视图或模型

    我正在研究一个奥多模块.在 我希望我的模块是一个"报告"大多数购买的产品(按客户).在 我已经在Odoo上创建了一个视图,但是现在,我需要按客户"过滤"这些视图 ...

  4. php yii orm,Yii中的sql查询的位置(或任何支持ORM的框架)?

    对于使用MVC体系结构的项目,这是更多的编码风格问题. 我正在使用Yii框架开展一个项目. 每个数据库表都有它自己的模型类,可以让我充分利用Yii的活动记录. 凉. 但是现在我需要用一个复杂的逻辑和大 ...

  5. SQL查询语句 select 详解

    查询select: 1.单表查询 2.多表查询 3.嵌套查询分类 1)单表查询 2)多表查询 A.连接查询 B.子查询 ①一般子查询 ②相关子查询*************************** ...

  6. php 优化sql,php – 优化此SQL查询

    这个SQL查询让我感到厌恶.我没有写它,但它是我们服务器问题的一个重要原因.我愿意将它分成多个查询并通过PHP进行一些处理(比如,RAND()). $sql = "SELECT a.code ...

  7. SQL 查询总是先执行SELECT语句吗?你们都错了!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 译者:无明 链接:infoq.cn/article/Oke8hgi ...

  8. MySQL番外篇:一条SQL查询语句是如何执行的?

    在面试的过程中,有的面试官会给出一条简单的SQL查询语句,让简单说一下执行的过程. SELECT * FROM emp where age=30; 以下问MySQL的基本架构图,从中可以看出SQL语句 ...

  9. SQL查询语句总是先执行SELECT?你们都错了。。。

    来源 | infoq.cn/article/Oke8hgilga3PTZ3gWvbg 很多 SQL 查询都是以 SELECT 开始的.不过,最近我跟别人解释什么是窗口函数,我在网上搜索"是否 ...

最新文章

  1. ## **scrapy+kafka+sparkstream爬取京东Iphone12评论储存数据**
  2. .net 裁剪图片(不压缩)
  3. 一文读懂 etcd 的 mvcc 实现
  4. Python3快速入门——(2)list和tuple(列表和元组)
  5. Unity二维码生成与识别
  6. 联想笔记本怎么进入pe系统_联想笔记本怎么进入bios设置u盘启动新方法
  7. 西电c1级计算机应用测试题型,西电计算机应用基础测试题
  8. 共探数字化安全新未来,CSA SDP2.0标准发布暨零信任技术研讨会召开
  9. arcgis导出的图片无效_img影像在arcgis中生成JPG图片空白求解
  10. java的Swing框架简介
  11. Python中文文本分句 sentence tokenize
  12. jle汇编_x86汇编指令集大全(带注释)
  13. 激战2怎么选最新的服务器,选哪个服好?《激战2》高玩分析各服务器进驻人数...
  14. mysql union update_MYSQL:union, 以及常用函数
  15. 还有不了解cookie的么,什么是cookie?cookie一直在用么?
  16. 阿里巴巴 暑假实习 笔试题(2014年3月29日)
  17. Pycharm terminal激活虚拟环境
  18. 基于springboot在线考试报名系统毕业设计源码031706
  19. 【算法】欧拉函数公式证明
  20. chap mysql借点_mysql必知必会-读书笔记(chap4-8)

热门文章

  1. 腾讯宣布:QQ空间花藤停止运营,80后的青春
  2. USB暂停与蓝牙鼠标断开
  3. Fastapi系列-同步和异步相互转换处理实践
  4. udp实现简单的多人聊天功能
  5. 计算机硬件最长寿,哪个品牌的笔记本使用寿命最长(一般使用条件下)?
  6. 我是女孩子,我适合学前端开发吗?
  7. php 声明struct_彻底搞懂PHP 变量结构体
  8. Windows Defender(安全中心)病毒和威胁防护排除文件/文件夹 的方法
  9. web课程设计网页规划与设计---航天网页
  10. 小候鸟图书角项目活动之相趣冬月 阅读成长 妙笔绘秋