| Есть почты юзеров около 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>"; |