前言

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

所以这个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. sratookit

    sratookit 下载后解压 tar -zxvf sratoolkit.2.8.2-1-ubuntu64.tar.gz 移动到专门安装生物信息软件的目录下 mv sratoolkit.2.8.2-1 ...

  2. 如何在mac里面,把xcode代码同步到 tfs 的 git库(克隆git篇)

    如果是新的git库,还没有任何内容可以克隆,可以参考:http://www.cnblogs.com/IWings/p/6755795.html 在mac安装visual studio code htt ...

  3. Enable ssh root login in Solaris

    1. Change the file /etc/ssh/sshd_config with PermitRootLogin yes to replace PermitRootLogin no 2. re ...

  4. inet_XX族函数

    在网络编程中, 经常会将网络字节转为本地字节或者将本地字节转为网络字节, 但是如果每次我们都是都通过htonl, ntohl函数需要将10进制转为整数, 甚至还用将字符串转为整数, 再转为网络字节, ...

  5. codevs——4189 字典&&HihoCoder #1014 : Trie树

    题目描述 Description 最经,skyzhong得到了一本好厉害的字典,这个字典里整整有n个单词(1<=n<=200000) 现在skyzhong需要在字典里查询以某一段字母开头的 ...

  6. Linux:SSH连接原理

    1,SSH开启 2,执行:ssh username@ip地址 例如ssh root@10.1.1.1 3,查看cat ./ssh/kown_hosts 里面就保存了10.1.1.1的公钥了 4,对比一 ...

  7. MySQL之索引以及正确使用索引

    一.MySQL中常见索引类型 普通索引:仅加速查询 主键索引:加速查询.列值唯一.表中只有一个(不可有null) 唯一索引:加速查询.列值唯一(可以有null) 组合索引:多列值组成一个索引,专门用于 ...

  8. 【Codeforces 1106D】Lunar New Year and a Wander

    [链接] 我是链接,点我呀:) [题意] 让你遍历n个节点,访问过的节点不操作. 如果是没有访问过的点,那就把它加到序列的末尾. 问你形成的最小字典序的序列是多少. [题解] 显然每次找最小的标号 用 ...

  9. BUPT2017 springtraining(15) #3

    这里这里 A.签到题 #include <cstdio> double a[] = {0.4, 0.16, 0.063, 0.025, 0.010, 0.004}; int main() ...

  10. 20180620关于使用xtrabackup热还原数据库

    参看:http://www.cnblogs.com/waynechou/p/xtrabackup_backup.html http://www.cnblogs.com/waynechou/p/xtra ...