new: Мой ФэшнБлог

Добавить много юзеров в определенную группу

Есть почты юзеров около 10тыщ, они все зареганные юзеры на сайте.

Задача:
добавить их в определенную группу ID 37.
по этой группе дается им скидка на продукты.
через битрикс апи подвисает, делаю поэтому через sql запросы
$groupId = 37;
$emails = ["one@email.ru", "two@email.ru"]; //массив с почтами
$emails = array_unique($emails);

//формируем sql строку с запросом
$emails2 = [];
foreach($emails as $email){
    $emails2[] = "'".$email."'";
}
$emails2 = implode(",",$emails2);
$sql = "select ID from b_user where LOGIN in (".$emails2.")"; //LOGIN=EMAIL  у нас

$connection = \Bitrix\Main\Application::getConnection(); 
$recordset = $connection->query($sql); //получаем айдишники


while ($record = $recordset->fetch()){  
   $connection->queryExecute("INSERT INTO b_user_group (USER_ID, GROUP_ID) VALUES (".$record["ID"].", $groupId)"); //добавляем в таблицу с группами  
}

когда требуется еще немного добавить юзеров, то надо посмотреть пересечения, иначе будут ошибки

выведутся юзеры, которые еще не состоят в нужной группе
$groupId = 37;
$emails = ["one@email.ru", "two@email.ru"]; //массив с почтами
$emails = array_unique($emails);

$arNotFound = [];//тут будут не найденные в системе юзеры

foreach($emails as $email){
   $rsUser = CUser::GetByLogin($email); //в моем случае логин=почта
   if($arUser = $rsUser->Fetch()){
      $arGroups = CUser::GetUserGroup($arUser["ID"]);
      if(!in_array($groupId,$arGroups)){
          echo $email.'<br>';
      }      
   }
   else{
    $arNotFound[]= $email;
   }
      
}
echo "user is not found:<pre>";
print_r($arNotFound);
echo "</pre>";
их потом первым скриптом добавить

а если надо часть удалить из группы
$groupId = 37;
$emails = ["one@email.ru", "two@email.ru"]; //массив с почтами, которых удалить из группы
$emails = array_unique($emails);

$arNotFound = [];//тут будут не найденные в системе юзеры
foreach($emails as $email){
   $rsUser = CUser::GetByLogin($email); //в моем случае логин=почта
   if($arUser = $rsUser->Fetch()){
      $arGroups = CUser::GetUserGroup($arUser["ID"]);
      if(in_array($groupId,$arGroups)){
    unset($arGroups[array_search($groupId,$arGroups)]); //удаляем ИД нужной группы из массива групп юзера
         CUser::SetUserGroup($arUser["ID"], $arGroups);             
      }        
   }
   else{
       $arNotFound[]= $email;
   }
      
}
echo "user is not found:<pre>";
print_r($arNotFound);
echo "</pre>";