ThinkPHP 5 根据账户类型的不同统计数据中使用CASE WHEN THEN SQL语句实例

项目场景

是外卖代运营平台,每个客户都有相关运营人员、签约业务员,分别在客户信息表里有user_id、business_id字段记录。

需求描述

在网站用户列表里,能直观看到实际每个人所关联的客户总数量、不同状态的数量分别是多少。

解决方案
php 复制代码
$res_arr = User::alias('a')
            ->field('
            a.*,
            l.name as level_name,
            (SELECT COUNT(*) AS tp_count FROM `qqxz_shop_customer` where a.id=user_id and `delete_time` is  null) shop_sum,
            (SELECT COUNT(*) AS tp_count FROM `qqxz_shop_customer` where a.id=business_id and `delete_time` is  null) business_sum,
            (SELECT COUNT(*) AS tp_count FROM `qqxz_shop_customer` where a.id=(CASE WHEN user_type = 2 THEN user_id ELSE business_id END )  and `delete_time` is  null and operation_status=4) contract_sum,
            (SELECT COUNT(*) AS tp_count FROM `qqxz_shop_customer` where a.id=(CASE WHEN user_type = 2 THEN user_id ELSE business_id END )  and `delete_time` is  null and operation_status=3) stop_sum,    
            (SELECT COUNT(*) AS tp_count FROM `qqxz_shop_customer` where a.id=(CASE WHEN user_type = 2 THEN user_id ELSE business_id END )  and `delete_time` is  null and operation_status=1) ing_sum,
            (SELECT COUNT(*) AS tp_count FROM `qqxz_shop_customer` where a.id=(CASE WHEN user_type = 2 THEN user_id ELSE business_id END )  and `delete_time` is  null and operation_status=2) wait_sum
            ')
            ->join('qqxz_user_level l','l.id = a.level','left')
            ->where('a.user_type!=1')
            ->where('a.delete_time',null)
            ->order('a.create_time desc')
            ->where($sql)
            ->paginate($limit, $simple = false,['page'=>$page])
            ->toArray();

user_type 2是运营人员

相关推荐
小镇敲码人2 小时前
【深入浅出MySQL】之数据类型介绍
android·数据库·mysql
尤物程序猿3 小时前
【2025最新】为什么用ElasticSearch?和传统数据库MySQL与什么区别?
数据库·mysql·elasticsearch
别来无恙1493 小时前
MySQL JOIN详解:掌握数据关联的核心技能
数据库·mysql
王嘉俊9256 小时前
一条 SQL 查询语句是如何执行的(MySQL)
数据库·sql·mysql
blackA_6 小时前
数据库MySQL学习——day8(复习与巩固基础知识)
数据库·学习·mysql
alden_ygq6 小时前
/etc/kdump.conf 配置详解
服务器·网络·php
o不ok!7 小时前
实验4 mySQL查询和视图
数据库·mysql·oracle
有时间要学习7 小时前
MySQL——数据库基础&&操作
数据库·mysql
Dreams_l8 小时前
MySQL初阶:数据库基础,数据库和表操作,数据库中的数据类型
数据库·mysql