Избавиться от нескольких запросов или сделать рефакторинг

ваяс

Все чикан-пикан
Всех приветствую...
Есть следующий метод для работы с объявлением(недвижимости)
PHP:
public function ActivateAdvert()
    {
        $arrChek = explode(',', $this->post['all-chek']); // на странице мы отметили несколько чеков с объявлениями и пришла строка вида "4,3,2,1,"
        $arrChekParam = explode(',', $this->post['param-chek']);   // на этой же странице мы указали параметры куда может будет выгружаться данное объявление может придти строка вида "site1|4,site1|2,site2|2,site3|2,site1|1,site3|1," т.е. в $arrChekParam будет массив с элементами типа (site1|4,) где site1 это на какой сайт выгрузить, а 4 это id объявления
        
        foreach ($arrChek as $val)  // итак первая итерация сюда приходит 4
        {
            if($val != '')
            {
                $param = '';
                foreach ($arrChekParam as $arrParam) // а сюда site1|4,
                {
                    $arr = explode('|', $arrParam);      
                    if($val == $arr[1] && $val != '')  здесь проверим будут ли равны ID
                    {
                        $param .= $arr[0] . '#'; сюда запишем сайт
                        $idAdvert = $arr[1];        сюда ID
                    }                        
                }
                if(!$param) это условие выполниться в том случае, если например мы выбрали одно объявление, но не выбрали ни одного сайта, тогда просто подставятся все параметры
                {
                    $vals = '1';
                    $query = $this->conn->dbh->prepare("UPDATE main_obj_realty SET site1= :site1, 
                                                    site2= :site2, site3= :site3
                                                    WHERE user_id = :id AND id = :idAdvert");
                        $query->bindParam(":id", $this->session['id'], PDO::PARAM_STR);
                        $query->bindParam(":site1", $vals, PDO::PARAM_STR);
                        $query->bindParam(":site2", $vals, PDO::PARAM_STR);
                        $query->bindParam(":site3", $vals, PDO::PARAM_STR);
                        $query->bindParam(":idAdvert", $val, PDO::PARAM_INT);
                        $query->execute();

                }
                else
                {
                    $paramSplit = explode('#', $param); // здесь у нас может придти массив из трех сайтов поэтому такое условие думаю это понятно
                    $site1= ($paramSplit[0] == 'site1' || $paramSplit[1] == 'site1' || $paramSplit[2] == 'site1) ? '1' : '0';
                    $site2 = ($paramSplit[0] == 'site2' || $paramSplit[1] == 'site2' || $paramSplit[2] == 'site2') ? '1' : '0';
                    $site3 = ($paramSplit[0] == 'site3' || $paramSplit[1] == 'site3' || $paramSplit[2] == 'site3') ? '1' : '0';
                    $query = $this->conn->dbh->prepare("UPDATE main_obj_realty SET site1= :site1, 
                                                    site2= :site2, site3= :site3
                                                    WHERE user_id = :id AND id = :idAdvert");
                        $query->bindParam(":id", $this->session['id'], PDO::PARAM_STR);
                        $query->bindParam(":site1", $site1, PDO::PARAM_STR);
                        $query->bindParam(":site2", $site2, PDO::PARAM_STR);
                        $query->bindParam(":site3", $site3, PDO::PARAM_STR);
                        $query->bindParam(":idAdvert", $val, PDO::PARAM_INT);
                        $query->execute();
                }
            }
        }   
    }
// ну и так по каждой итерации, подскажите можно что то с этим сделать
Может быть можно как то избавиться от нескольких запросов, или сделать рефакторинг.
Таких методов несколько для поднятия объявления, для продления, и т.д.
 
Сверху