首页 > 编程语言 >thinkphp5 使用group查询最新的一条记录

thinkphp5 使用group查询最新的一条记录

时间:2023-10-24 18:13:45浏览次数:39  
标签:customer group create thinkphp5 查询 record time id

thinkphp5示例:

//子查询主要的在MAX(create_time)
$subQuery = Db::table('fa_crm_record')
                        ->field('customer_id,MAX(create_time) AS create_time')
                        ->group('customer_id')
                        ->buildSql();
                        
//主查询主要的在"r.create_time=record.create_time"
$list = (new Customer)
            ->with(['record'])
            ->order("record.create_time desc")
            ->where($where)
            ->join("$subQuery r","r.create_time=record.create_time")
            ->paginate($limit);

//或者$this->model = new Record();
$list = $this->model
            ->with(['customer'])
            ->order("record.create_time desc")
            ->where($where)
            ->join("$subQuery r","r.create_time=record.create_time")
            ->paginate($limit);

 

原SQL查询,子查询里max是关键,主要是获取最新的时间戳然后赋值给新的create_time

#原数据
SELECT id,customer_id,content,create_time FROM fa_crm_record ORDER BY create_time desc

如果你直接使用group查询的话会这样

SELECT id,customer_id,content,create_time FROM fa_crm_record GROUP BY customer_id ORDER BY create_time desc

明显customer_id=1725,1726不是最新的信息,最新的信息ID是47,45才对

 

现在用子查询把最新的时间取出来

SELECT id,content,customer_id, MAX(create_time) AS create_time
    FROM fa_crm_record GROUP BY customer_id ORDER BY create_time desc

 

咋一看以为跟上面的效果差不错,但是你看create_time的时间是不是ID47和ID45的时间戳来着,这样就拿到了最新的时间了,不用管这个返回的ID

 

拿到了这个时间搓之后,就可以来查询了

SELECT t1.id,t1.content,t1.customer_id,t1.create_time
FROM fa_crm_record t1
INNER JOIN (
    SELECT customer_id, MAX(create_time) AS create_time
    FROM fa_crm_record
    GROUP BY customer_id
) t2 ON t1.create_time = t2.create_time ORDER BY create_time desc;

回过去第一个查询sql跟这个查询对比,是不是拿到最新的查询了

 

标签:customer,group,create,thinkphp5,查询,record,time,id
From: https://www.cnblogs.com/jsyphp/p/17785425.html

相关文章

  • 内核补丁查询
    https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/mm/debug.c?h=linux-5.4.y&id=4d35427ad7641cba08ea0deffae1a78147ad41c0......
  • 通过MySQL router连接MySQL8.0.23 Group Replication使用方式
    服务器信息:应用服务器:部署Myrouter,版本mysql-router-8.0.23-linux-glibc2.17-x86_64-minimal10.172.144.8810.172.144.89数据库服务器:部署MGR,版本mysql-8.0.23-linux-glibc2.17-x86_64-minimal10.172.144.6510.172.144.6610.172.144.671、MySQL8.0.23GroupReplication集群配置......
  • MySQL--查询和常用函数(知识点)
    1.查询1.1查询语法:select显示的字段列表from表名where条件GROUPBY分组having条件limit开始记录,条数orderby排序字段desc降序|asc升序10.1.1全查询语法:select显示的字段列表from表名全查询10.1.2条件查询(查询部分行)语法:select显示的字段列表fr......
  • Django+celery+eventlet+flower+redis异步任务创建及查询实现
    1.环境版本:Django3.2.12celery5.3.4eventlet0.33.3flower2.0.1redis3.5.3项目名称:new_project2.celery配置(settings.py)#celery#django-celery配置的部分#Broker配置,使用Redis作......
  • Android中RadioGroup的使用
    在安卓中为了给在几个选项中选择其中某个选项,需要用到Radiogroup2、为了增加灵活行,想要在Java代码中动态加载Radio这就涉及到一个问题,Radio的样式应该怎样修改RadioGroup的代码<RadioGroupandroid:id="@+id/rbgAttrSelect"android:layout_width="match_parent"......
  • mybatis的一级缓存和事务注解失效导致的查询结果缺失
    事情是这样的,测试发现有个查询接口,第一次调的时候没能返回数据,第二次调就可以正常返回。这个接口的功能是查询用户的现有福利数据。具体点的逻辑是1,查询数据库,mybatis,xml里面写的关联查询,主表和子表关联。2,判断查询结果,如果没有子表部分的信息,则按照业务逻辑生成子表数......
  • 安防视频监控平台EasyCVR查询告警后,无法自动清除记录该如何优化?
    视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能支持视频定时轮播。视频监控平台EasyCVR支持多种播放协议,包括:HLS、HTT......
  • spring data jpa 使用原生sql查询数据库 原生sql中有in关键字 该如何传参?直接传List集
    springdatajpa使用原生sql查询数据库原生sql中有in关键字该如何传参?直接传List集合就能找到数据,解析List集合交给springdatajpa框架去做遇到问题?第一次写的时候in关键字后面传的是将List集合转化为一个这样的字符串,"'123','23','23'" @Query(nativeQuery=true,......
  • Spring Data JPA : 查-条件化查询Specification
    条件化查询 用查询条件创建Specification对象参考SpringDataJPASpecification查询使用Criteria查询Criteria查询是面向对象查询,root就是一个对象,root.get("name")就是name属性。可以级联获取属性每一个查询条件创建一个Specification对象,如果有多个查询条件,就把多个Spec......
  • 议题征集|The Open Group 2023亚太区年度颁奖盛典暨ESG架构年度大会诚邀演讲嘉宾!
    每个人心中都有各自对ESG架构管理的想象与理解我们期待用一场汇聚真知灼见与探索实践的盛典重新定义架构的奇妙▼ 在全球可持续发展浪潮下,ESG目标(环境、社会和治理)的重要性愈发凸显。越来越多的企业认识到,以ESG为基础的商业模式能够为组织带来更长远、可持续的价值。在实现ESG可持......