前言

查询聊天列表,并返回最后一条聊天记录。这个有一个比较尴尬的点就是,一个是你主动发出的,一个是你接收的。

所以这个SQL会比较长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长!

步骤

查询出自己发的消息然后联合查询接收到的消息,这里要提下union的特性,就是两个合并的查询语句

  1. 字段数量必须一致!
  2. 字段顺序必须一致!
  3. 数据类型也要相似!

原始SQL

SELECT `uid`,`nickname`,`avatar`,`content`,`time` FROM (
SELECT * FROM (
SELECT toid as uid,`content`,`time` FROM `chat_log` WHERE ( fromid =1 )
UNION
SELECT fromid as uid,content,time FROM chat_log WHERE toid = 1
) `tmp` GROUP BY tmp.uid ORDER BY `tmp`.`time`
) `t` LEFT JOIN `chat_user` `u` ON `t`.`uid`=`u`.`id`

查询结果

改为TP5

整理思路也很简单,就是先进行**两次**sql语句的构造,然后用左连接查询.

 $sub = Db::name('log')
->field('toid as uid, content, time')
->where('fromid ='.$fromid)
->union('SELECT fromid as uid,content,time FROM chat_log WHERE toid = '.$fromid)
->buildSql();
$query = Db::table($sub)
->alias('tmp')
->group('tmp.uid')
->order('tmp.time')
->buildSql();
$info = DB::table($query)
->alias('t')
->field('uid,nickname,avatar,content,time')
->join('chat_user u', 't.uid=u.id', 'LEFT')
->select();

查询结果

{
"status": true,
"msg": "请求成功",
"data": [
{
"uid": 2,
"nickname": "立冬",
"avatar": "https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=3667616433,706958275&fm=26&gp=0.jpg",
"content": "1553187007",
"time": 1553187000
},
{
"uid": 3,
"nickname": "立春",
"avatar": "https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=3962805517,413692801&fm=26&gp=0.jpg",
"content": "立春姐姐",
"time": 1553187001
},
{
"uid": 4,
"nickname": "立夏",
"avatar": "https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=153106697,274998536&fm=26&gp=0.jpg",
"content": "立夏姐姐",
"time": 1553187002
},
{
"uid": 5,
"nickname": "小雨",
"avatar": "https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=412473880,1796535308&fm=26&gp=0.jpg",
"content": "小雨妹妹",
"time": 1553187022
}
]
}

TP5.x——聊天列表查询的更多相关文章

  1. SHAREPOINT - CAML列表查询

    首先要了解的是CAML(Collaboration Application Markup Language)不仅仅是用在对列表.文档库的查询,字段的定义,站点定义等处处使用的都是CAML. 简单的提一 ...

  2. atitit.提升开发效率---MDA 软件开发方式的革命(5)----列表查询建模

    )----列表查询建模 1. 配置条件字段@Conditional 1 2. 配置条件字段显示类型为range----@Conditional(displayType = displayType.ra ...

  3. 【Javascript】列表查询页面,简单地保存上一次查询的查询参数

    开发中经常做一些查询参数 + 列表参数的功能,这些功能有时候需提供导出Excel,或带超链接到其他明细页面的功能点. 在一些交互性要求严格的系统,需求方会要求: 用户第一个输入某些查询条件进行列表查询 ...

  4. Moss列表查询,删除条目,更新条目。

    基于Query语句的列表查询 function retrieveListItems(itemId) {    var siteUrl=_spPageContextInfo.webServerRelat ...

  5. 【SSH系列】一步步深入springmvc+商品列表查询demo

    在前面的博文中,小编主要简单的介绍springmvc的体系结构.mvc模式的优缺点以及mvc框架,今天我们来继续学习springmvc的相关知识,在这篇博文中,小编讲解过springmvc的体系结构, ...

  6. SharePoint中跨列表查询

    1,最近的项目中遇到一个需求,站点中有几十个列表,其中每5,6个列表属于一个模块下的.客户的需求是,首页上显示一个模块下所有列表数据的前5条,并按创建时间排序. 2,刚刚考虑到这块的实现方法时,用的是 ...

  7. 写了一个Windows服务,通过C#模拟网站用户登录并爬取BUG列表查询有没有新的BUG,并提醒我

    写了一个Windows服务,通过C#模拟网站用户登录并爬取BUG列表查询有没有新的BUG,并提醒我 1.HttpUtil工具类,用于模拟用户登录以及爬取网页: using System; using ...

  8. Office365学习笔记—列表查询,删除条目,更新条目。

    1,基于Query语句的列表查询. function retrieveListItems(itemId) { var siteUrl=_spPageContextInfo.webServerRelat ...

  9. (六)通过solr7的API实现商品的列表查询

    (六)通过solr7的API实现商品的列表查询 工具类: 获取 HttpSolrClient public class Constant { public static HttpSolrClient ...

随机推荐

  1. C# 获得固定年月日

    /// <summary> /// 获得固定年月日,时和分不固定 : 2019-01-01 00:00:00 /// </summary> /// <returns> ...

  2. CAD处理键盘按钮被释放(com接口VB语言)

    主要用到函数说明: MxDrawXCustomEvent::KeyUp 键盘按钮被释放,详细说明如下: 参数 说明 iVk 是按钮码,如F8,的值为#define VK_F8 0x77 返回0消息继续 ...

  3. CAD在网页绘一个直线,得到直线id,再调该得到直线对象,然写扩展数据

    IMxDrawDatabase::ObjectIdToObject 实体id返回实体对象. 参数 说明 [in] LONGLONG lId 实体id JS代码,中绘一个直线,得到直线id,再调该得到直 ...

  4. vC web管理无法访问解决办法

    localhost:~ # service-control --status vsphere-clientINFO:root:Service: vsphere-client, Action: stat ...

  5. 获取webconfig配置文件内容

    string ServerUrl= ConfigurationManager.AppSettings["ServerUrl"].ToString(); web.config中的配置 ...

  6. hdu 4870

    Rating Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  7. 洛谷——P4014 分配问题

    P4014 分配问题 题目描述 有 nn 件工作要分配给 nn 个人做.第 ii 个人做第 jj 件工作产生的效益为 c_{ij}cij​ .试设计一个将 nn 件工作分配给 nn 个人做的分配方案, ...

  8. 7 numpy 傅里叶,提取图片轮廓

    任务:提取照片中轮廓   本次处理图片:我的女神之一  江一燕   导入模块: #jyy.show()   会打开本地图片浏览器       使用傅里叶反转 获取实部,舍弃虚部 去除小数部分 将一维数 ...

  9. sql server的 between and 日期问题

  10. openstack部署工具简介

    个人使用方面DevStack无疑,在可预见的未来时间内,DevStack仍将是众多开发者们的首选安装方式或工具.该方式主要是通过配置参数,执行shell脚本来安装一个OpenStack的开发环境.Gi ...