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();
看到这⾥,我就想到办法了,原来⼦查询出来的结果作为表,再将此表与其他表关联查询即可!
thinkphp3需求说明
由于我需要统计耗材材料表每种材料的总耗材数量,因此需要将它做⼀个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(),
]);
关键词:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论