TP的查询语句:1对n关联表查询统计时,需查询A表中所有数据(视频列表),并查询B表中关联A表数据的统计数量(点赞数量),在加上A表中的虚拟统计数量(虚拟点赞数),作为最终统计数量(总点赞数),并做排序的写法:
(即:视频有虚拟点赞数和真实点赞数,真实点赞数记录在B表,通过A表主键ID做关联。查询结果的点赞数=虚拟点赞数+正式点赞数)
1、先将B表的数据,按A表的关联字段做分组查询并统计数量,field中填写关联字段和统计数量结果字段,其他字段自己看情况增加
$subsql = UserVideoRelation::alias(‘a‘) ->field(‘a.video_id,count(a.id) count1‘) ->group(‘a.video_id‘) ->buildSql();
2、查询A表记录,并关联上面步骤的结果,注意关联类型必须为:LEFT
$list = UserVideo::alias(‘v‘) ->field(‘v.*,IFNULL(a.count1,0) + IFNULL(v.sys_zan,0) as count‘) ->join([$subsql => ‘a‘], ‘v.id=a.video_id‘, ‘left‘) ->order(‘count desc‘)->limit(10)->select()->toArray();
Thinkphp做表关联查询:A表所有数据,并查询关联的B表的数量并累加A表字段做排序的案例
原文:https://www.cnblogs.com/yshhy/p/14247015.html