208 похожих чатов

Есть какой-то более правильный способ получить список групп пользователя в

одном запросе со списком пользователей?

$arQueryParams = [
'select' => ['*', 'GROUPS_IDS'],
'runtime' => [
new Entity\ExpressionField('GROUPS_IDS', '(SELECT GROUP_CONCAT(b_user_group.GROUP_ID) FROM b_user_group WHERE b_user_group.USER_ID = main_user.ID)')
]
];

$obj = \Bitrix\Main\UserTable::getList($arQueryParams);

21 ответов

5 просмотров

есть. называется - два запроса

Антон (code-pilots)- Автор вопроса
Eugene Zhukov
есть. называется - два запроса

Не прокатит, это надо архитектуру классов выгрузки менять.

Антон (code-pilots)
Не прокатит, это надо архитектуру классов выгрузк...

При таком запросе у вас невалидные данные, т.к. принадлежность к группе 2 не будет выбрана. Равно как и будет ошибка выбора принадлежности к группам с учетом текущей даты. Ну и надо, видимо, менять архитектуру.

Антон (code-pilots)- Автор вопроса
Eugene Zhukov
При таком запросе у вас невалидные данные, т.к. пр...

Это что за группа? Вроде все группы через запятую выгружает

GROUPS уже есть в сущности. Просто делаем выборку. Пример через Entity_Objects, но можно и через fetch, только учесть, что во втором случае группы приходят разными fetch-ами, то есть нужно их тоже в цикле собирать, группируя по пользователю use Bitrix\Main\Entity\Query; use Bitrix\Main\UserTable; $res = (new Query(UserTable::getEntity())) ->whereIn('ID', [1, 3, 4, 5, 6]) ->setSelect(['ID', 'NAME', 'LAST_NAME', 'GROUPS.GROUP_ID']) ->exec(); $users = []; while($uEo = $res->fetchObject()) { $currentUser = [ 'NAME' => $uEo->getName(), 'LAST_NAME' => $uEo->getLastName(), 'GROUPS' => [] ]; foreach($uEo->getGroups() as $gEo) { $currentUser['GROUPS'][] = $gEo->getGroupId(); } $users[$uEo->getId()] = $currentUser; } unset($currentUser);

Попробовал так у себя - работает $query = GroupTable::query() ->setSelect(['NAME', 'ID', 'USERS', 'USERS.USER.SHORT_NAME', 'USERS.USER.ID']) ->registerRuntimeField( (new OneToMany('USERS', UserGroupTable::class, 'GROUP')) ->configureJoinType(\Bitrix\Main\Entity\Query\Join::TYPE_LEFT) ); foreach ($query->fetchCollection() as $group) { print_r('<b>' . $group->getName() . '</b>:<br />'); foreach ($group->get('USERS') as $userGroup) { $user = $userGroup->getUser(); $user and print_r($user->getShortName() . ';<br />'); } }

Антон (code-pilots)- Автор вопроса
AlexeyGfi
GROUPS уже есть в сущности. Просто делаем выборку....

Спасибо, я покурю это. Видимо придётся все же расширять функционал модуля экспорта до произвольного Query . Пока модуль умеет выгружать только результаты getList. Думал смогу красиво всё в один fetch впихнуть. Но красиво не выходит.

Антон (code-pilots)
Спасибо, я покурю это. Видимо придётся все же расш...

getList — это те же яйца, только вид снизу (уровнем ниже: загляните в UserTable::getMap). Я просто работаю с Query, но точно тот же подход с getList-ом

Антон (code-pilots)- Автор вопроса
⚒ ᎪᏞᎬᏦᏚᎪɴᎠᎡ ⚒
Попробовал так у себя - работает $query = GroupTa...

Спасиб! Но Это же у нас группы с пользователями, а мне надо пользователи с ID групп. Или ошибались ошибаюсь? Не за компом.

Антон (code-pilots)- Автор вопроса
AlexeyGfi
screenshot getList — это те же яйца, только вид снизу (уровне...

Спвсибо, надо себе выкачать ядро и смотреть, все руки не доходят.

Антон (code-pilots)
Спвсибо, надо себе выкачать ядро и смотреть, все р...

и проиндексировать в ide, и разрабатывать проекты локально, и никогда-никогда больше не спрашивать в чате в какой по счету параметр передают select в старом гетлисте:D

Антон (code-pilots)- Автор вопроса
AlexeyGfi
GROUPS уже есть в сущности. Просто делаем выборку....

Погонял этот вариант на 14000+ юзерах, Время выполнения: 31.443738 мой вариант с подзапросом Время выполнения: 0.573712

Антон (code-pilots)- Автор вопроса
AlexeyGfi
screenshot Таблица юзеров с 40 312 душами

Не выводил результат, чтобы не терялось время

Антон (code-pilots)
Не выводил результат, чтобы не терялось время

Вы в сообщении сравниваете работу запросов, а говорите суммарно про php-код?

Антон (code-pilots)- Автор вопроса
AlexeyGfi
Вы в сообщении сравниваете работу запросов, а гово...

Я в целом сравниваю один и тот же результат.

AlexeyGfi
GROUPS уже есть в сущности. Просто делаем выборку....

аа, там же через это как раз и есть доступ (new OneToMany('GROUPS', UserGroupTable::class, 'USER')) ->configureJoinType(Entity\Query\Join::TYPE_INNER), тогда достаточно будет фильтрацию прописать по GROUPS.GROUP_ID, верно?

AlexeyGfi
Вам если я правильно слежу нужно where not in

Так. Может еще подскажете. Так как там у групп INNER JOIN, то все удваивается, а если добавлять 'group' ключ, то все поля прпадают в группировку и ничего не группируется. вопрос - как сгруппировать результат так, чтобы он выводился корректно?

Похожие вопросы

Обсуждают сегодня

@Aiwan что такое база образца?
Alexey
27
Не многие знают, а кто знает, тот уже успел забыть, что в далёком 2004 году эта игра произвела настоящий фурор, настолько революционной была технология, применяемая для её соз...
ICCID
4
Короче я тут узнал полный пиздец Что кучу постов которые я создавал через posted Спустя время не могу редактировать и менять Мол телега возвращае ошибку Это реально так ...
inc.
13
коллеги, добрый вечер! А никто не знает как модальная форма может себя закрыть? Ну допустим модальная форма определила, что смысла ей работать нет и хочет вернуть modalResult...
Михаил
83
Хотя у меня сейчас есть более сложная задача, вот её думаю: как объяснить челу переходного возраста противоположного полу, обучающегося в польском колледже (а-ля наш техникум)...
Вячеслав Кузьменко
15
Добрый день Хочу начать обучение языку, не являюсь представителем it, буду благодарна за помощь, совсем пока не понимаю ничего) Подскажите, пожалуйста, где можно начать первы...
Sara Lala
30
что читать по делфи?вообще 0 в нем
fd dsds
9
Привет, сталкивался кто с такой ситуацией? У меня есть модальное окно Bootstrap, в нем кнопка закрытия: <button type="button" class="btn-close" data-bs-dismiss="modal" aria-...
Виталий
3
верно что я могу удалить эти addq и subq т.к. со стеком никакого взаимодействия нет (исключая call)?
Michael
16
Hi Everyone! To all Are you Looking for Interview Support at the Lowest Price? Look no further! Then contact us We offer Interview Support for a low cost variety of technol...
Rambabu Nallamilli
3
Карта сайта