php 某字段分组统计,ThinkPHP分组汇总统计如何实现

ThinkPHP5如何实现分组多表查询呢?TP的功能确实很强大,但是用了这么久,一直不太会使用分组功能,今天特别针对项目研究了一下,看了一下官方的文档,终于弄明白了。今天记录下此方法,方便日后再次查阅时可回忆起来!

官方文档说明

join通常有下面几种类型,不同类型的join操作会影响返回的数据结果。INNER JOIN: 等同于 JOIN(默认的JOIN类型),如果表中有至少一个匹配,则返回行

LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行

RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行

FULL JOIN: 只要其中一个表中存在匹配,就返回行

官方说明最后一条://表名也可以是一个子查询

$subsql=Db::table('think_work')->where(['status'=>1])->field('artist_id,count(id)count')->group('artist_id')->buildSql();

Db::table('think_user')->alias('a')->join([$subsql=>'w'],'a.artist_id=w.artist_id')->select();

看到这里,我就想到办法了,原来子查询出来的结果作为表,再将此表与其他表关联查询即可!

需求说明

由于我需要统计耗材材料表每种材料的总耗材数量,因此需要将它做一个count运算,刚开始想不到办法,直接用Group by并不能得到我想要的结果。于是看了看文档后,才恍然大悟,弄明白了。

这里是先将耗材表做一个统计作为子查询,然后再与其他表做关联,得到其他表对应的子段值。//子查询得到子表,作为临时表与其他表进行内联查询

$subsql=db('material_use')->where('uid',$uid)

->field('material_id,sum(count)total_count')

->group('material_id')->buildSql();

$list=db('material_column')

->alias('mc')

->join('ruipai_materialm','m.column_id=mc.id')

->join([$subsql=>'mu'],'mu.material_id=m.id')

->group('mu.material_id')

->order('mu.total_countdesc')

->paginate(12,false,[

'query'=>request()->param(),

]);

关键词:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值