usersListingsCounter(); } protected function usersListingsCounter() { $last = 0; do { $items = $this->db->select(' SELECT user_id, COUNT(id) AS cnt FROM ' . Listings::TABLE_ITEMS . ' WHERE user_id > :last AND status != :notactivated GROUP BY user_id ORDER BY user_id LIMIT 100 ', [ ':last' => $last, ':notactivated' => Listings::STATUS_NOTACTIVATED, ]); $update = []; foreach ($items as $v) { $last = $v['user_id']; $update[ $v['user_id'] ] = 'WHEN user_id = ' . $v['user_id'] . ' THEN ' . $v['cnt']; } if (! empty($update)) { $this->db->exec('UPDATE ' . Users::TABLE_USERS_STAT . ' SET items = CASE ' . join(' ', $update) . ' ELSE items END WHERE user_id IN (' . join(',', array_keys($update)) . ')'); } } while (! empty($items)); } public function rollback() { } }