Browse Source

优化查询代码

zgg 4 months ago
parent
commit
f85634329f
1 changed files with 54 additions and 16 deletions
  1. 54 16
      application/api/controller/screen/Patrol.php

+ 54 - 16
application/api/controller/screen/Patrol.php

@@ -269,27 +269,65 @@ class Patrol extends Index
             ->field('a.id,a.title,patrol_addr_id')
             ->group('pr.patrol_addr_id')
             ->select();
+//旧代码,查询耗时过长!
+        // $titles = [];
+        // $y1 = [];
+        // $y2 = [];
+        // foreach ($lists as $k=>$v){
+        //     $titles[] = $v['title'];
+        //     $count1 = Db::name('patrol_record')
+        //         ->where('org_id',$this->orgId)
+        //         ->where('patrol_mode',1)
+        //         ->where('patrol_addr_id',$v['patrol_addr_id'])
+        //         ->where('create_yyyymmdd','=',$curDay)
+        //         ->count();
+        //     $y1[] = $count1;
+
+        //     $count2 = Db::name('patrol_record')
+        //         ->where('org_id',$this->orgId)
+        //         ->where('patrol_mode',1)
+        //         ->where('is_normal',1)
+        //         ->where('patrol_addr_id',$v['patrol_addr_id'])
+        //         ->where('create_yyyymmdd','<=',$curDay)
+        //         ->where('create_yyyymmdd','>=',$start)
+        //         ->count();
+        //     $y2[] = $count2;
+        // }
+        // 获取所有需要的记录,一次性查询
+        $records = Db::name('patrol_record')
+            ->where('org_id', $this->orgId)
+            ->where('patrol_mode', 1)
+            ->where(function ($query) use ($curDay, $start) {
+                $query->where('create_yyyymmdd', $curDay)
+                    ->WhereOr(function ($subQuery) use ($start, $curDay) {
+                        $subQuery->where('is_normal', 1)
+                            ->where('create_yyyymmdd', '>=', $start)
+                            ->where('create_yyyymmdd', '<=', $curDay);
+                    });
+            })
+            ->select();
+        
         $titles = [];
         $y1 = [];
         $y2 = [];
-        foreach ($lists as $k=>$v){
+        
+        foreach ($lists as $k => $v) {
             $titles[] = $v['title'];
-            $count1 = Db::name('patrol_record')
-                ->where('org_id',$this->orgId)
-                ->where('patrol_mode',1)
-                ->where('patrol_addr_id',$v['patrol_addr_id'])
-                ->where('create_yyyymmdd','=',$curDay)
-                ->count();
+            $count1 = 0;
+            $count2 = 0;
+        
+            foreach ($records as $record) {
+                if ($record['patrol_addr_id'] == $v['patrol_addr_id']) {
+                    if ($record['create_yyyymmdd'] == $curDay) {
+                        $count1++;
+                    }
+                    if ($record['is_normal'] == 1 && $record['create_yyyymmdd'] >= $start && $record['create_yyyymmdd'] <= $curDay) {
+                        $count2++;
+                    }
+                }
+            }
+        
             $y1[] = $count1;
-
-            $count2 = Db::name('patrol_record')
-                ->where('org_id',$this->orgId)
-                ->where('patrol_mode',1)
-                ->where('is_normal',1)
-                ->where('patrol_addr_id',$v['patrol_addr_id'])
-                ->where('create_yyyymmdd','<=',$curDay)
-                ->where('create_yyyymmdd','>=',$start)
-                ->count();
             $y2[] = $count2;
         }
         HelpHander::success(['titles' => $titles,'y1' => $y1,'y2' => $y2]);