thinkphp记一次关联查询统计以及join里使用Find_in_set

发布于 2024-07-17  537 次阅读


            $data = Db::name('class_students')->alias('a')
                ->join('user b', 'a.student_id = b.id and b.delete_time is null')
                ->join('task_classs c', '(FIND_IN_SET(a.student_id,c.student_id) OR (a.class_id = c.class_id and c.student_id is null)) and c.class_id = ' .$classId)
                ->join('task_child d', 'c.id = d.task_class_id and d.delete_time is null')
                ->leftJoin('task_student e', 'a.student_id = e.user_id and d.id = e.task_child_id and e.delete_time is null')
                ->where($where)
                ->group('a.student_id')
                // c.task_id,c.id as task_class_id,d.id as child_id,e.id as task_student_id ,
                ->field('a.id,b.id as user_id,b.nickname,b.avatar,count(e.id) as suc_total,count(d.id) as child_total,IFNULL(round( count(e.id) / count(d.id) , 2),0) * 100 as percentage')
                ->order('percentage desc')
                ->paginate(['page'=>$page,'list_rows'=>$limit])->toArray();