public function updateStatisticsForAllDays() { $projects = Project::fetchActiveIds($this->conn); foreach ($projects as $projectId) { $participants = $this->conn->fetchAll('SELECT p.`peopleNum`, p.`createdAt`, a.`id` AS `areaId` ' . 'FROM `' . EdkTables::PARTICIPANT_TBL . '` p ' . 'INNER JOIN `' . CoreTables::AREA_TBL . '` a ON a.id = p.areaId ' . 'WHERE a.projectId = :projectId ORDER BY p.`createdAt`', [':projectId' => $projectId]); $total = 0; $lastDay = null; $first = true; $areas = []; foreach ($participants as $participant) { $when = getdate($participant['createdAt']); $currentDay = $when['year'] . '-' . $when['mon'] . '-' . $when['mday']; if (!$first && $lastDay != $currentDay) { $this->updateStatsFor($projectId, $lastDay, $total); $this->updateAreaStatsFor($projectId, $lastDay, $areas); $lastDay = $currentDay; } if (!isset($areas[$participant['areaId']])) { $areas[$participant['areaId']] = 0; } $total += $participant['peopleNum']; $areas[$participant['areaId']] += $participant['peopleNum']; if ($first) { $first = false; $lastDay = $currentDay; } } } }