Prepare parameters. $join = array(); $leftJion = array(); $where = array(); $params = array(); ini_set('memory_limit', '512M'); $query = 'SELECT ' . 'company.name AS companyName, grp.name AS groupName, division.name AS divisionName, permission.name AS permissionName, ' . 'profile.firstName AS firstName, profile.familyName AS familyName, profile.email AS email,' . 'profile.mobile AS mobile, ' . ' (CASE WHEN (SUM(CASE WHEN auth.created >= :dateFrom THEN 1 ELSE 0 END) > 0) THEN profile.lastLogin ELSE \'none\' END) AS lastLogin, ' . ' SUM(CASE WHEN auth.created >= :dateFrom THEN 1 ELSE 0 END) AS numberOfLogins, ' . ' SUM(CASE WHEN auth.created >= :dateFrom60 THEN 1 ELSE 0 END) AS days_60, ' . ' SUM(CASE WHEN auth.created >= :dateFrom120 THEN 1 ELSE 0 END) AS days_120, ' . ' SUM(CASE WHEN auth.created >= :dateFrom180 THEN 1 ELSE 0 END) AS days_180 ' . ' FROM \User\Entity\Profile profile ' . ' LEFT JOIN profile.logins auth ' . ' LEFT JOIN profile.company company ' . ' LEFT JOIN profile.permissions permission ' . ' LEFT JOIN company.group grp ' . ' LEFT JOIN company.groupDivision division ' . '[WHERE] ' . 'GROUP BY profile.id ' . 'ORDER BY numberOfLogins DESC'; $params['dateFrom'] = new \DateTime('-30 days'); $params['dateFrom60'] = new \DateTime('-60 days'); $params['dateFrom120'] = new \DateTime('-120 days'); $params['dateFrom180'] = new \DateTime('-180 days'); $this->_queries['Date Created'] = new \DateTime(); $this->_queries['Date Created'] = $this->_queries['Date Created']->format('Y-m-d'); if (isset($this->_input['group']) && !empty($this->_input['group']) && 'null' != $this->_input['group']) { $this->_queries['Group'] = $this->em ->find('\Company\Entity\Group', $this->_input['group']) ->name; $where[] = 'grp.id = :group'; $params['group'] = $this->_input['group']; } if (isset($this->_input['groupDivision']) && !empty($this->_input['groupDivision']) && 'null' != $this->_input['groupDivision']) { $this->_queries['Division'] = $this->em ->find('\Company\Entity\GroupDivision', $this->_input['groupDivision']) ->name; $where[] = 'division.id = :division'; $params['division'] = $this->_input['groupDivision']; } if (isset($this->_input['company']) && !empty($this->_input['company']) && 'null' != $this->_input['company']) { $this->_queries['Dealership'] = $this->em ->find('\Company\Entity\Company', $this->_input['company']) ->name; $where[] = 'company.id = :company'; $params['company'] = $this->_input['company']; } #-> Finalize query. $query = str_replace(array( '[WHERE]' ), array( !empty($where) ? 'WHERE ' . implode(' AND ', $where) . ' ' : ' ' ), $query); #-> Collect data. $query = $this->em->createQuery($query); error_log(var_export($query->getSQL(),true)); !empty($params) && $query->setParameters($params); $results = $query->getResult(); // \Utility\Debug::errorLog('$results',$results ); for($i = 0; $i <= count($results); $i ++) { // \Utility\Debug::errorLog('$results[$i]',$results[$i] ); $days_30 = 0; $days_60 = 0; $days_120 = 0; $days_180 = 0; if(!empty($results[$i])) { if('0' != $results[$i]['numberOfLogins'] && 0 != $results[$i]['numberOfLogins'] && '' != $results[$i]['numberOfLogins']) { $days_30 = $results[$i]['numberOfLogins']; } if('0' != $results[$i]['days_60'] && 0 != $results[$i]['days_60'] && '' != $results[$i]['days_60']) { $days_60 = $results[$i]['days_60']; } if('0' != $results[$i]['days_120'] && 0 != $results[$i]['days_120'] && '' != $results[$i]['days_120']) { $days_120 = $results[$i]['days_120']; } if('0' != $results[$i]['days_180'] && 0 != $results[$i]['days_180'] && '' != $results[$i]['days_180']) { $days_180 = $results[$i]['days_180']; } $days_60 = $days_60 - $days_30; $days_120 = $days_120 - $days_60 - $days_30; $days_180 = $days_180 - $days_120 - $days_60 - $days_30; $results[$i]['days_60'] = $days_60; $results[$i]['days_120'] = $days_120; $results[$i]['days_180'] = $days_180; } } $this->_data = $results; } }