Есть почты юзеров около 10тыщ, они все зареганные юзеры на сайте. Задача: добавить их в определенную группу ID 37. по этой группе дается им скидка на продукты. |
$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>"; |