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

Добрый день, мне нужно перебрать всех пользователей, сделал код $i =

1;
while (true) {
$arRes = \CUser::GetList(
$by = "ID",
['id' => 'desc'],
['>ID' => 0],
['SELECT' => ['*', 'UF_*'],
'NAV_PARAMS' => ['nPageSize' => 30, 'iNumPage' => $i]
]
);
$el = $arRes->Fetch();
if (empty($el)) { break; } else { echo $el['ID'] . "\n"; }

while ($el = $arRes->Fetch()) {
echo $el['ID'] . "\n";
}
++$i;
}

у меня всего 290 страниц, и $i становится больше последней страницы Bitrix выдаёт первую, почему ? нужно както по другому выборку делать ?

19 ответов

24 просмотра

Что то странное делаете, зачем вам постраничная навигация в этом запросе? уберите её и while, получите одним запросом всех пользователей

Rico- Автор вопроса
Михаил Титков
Что то странное делаете, зачем вам постраничная на...

Сейчас у меня 290 пользователей, станет 1 000 000 , мне просто памяти нехватит всех достать сразу

Rico
Сейчас у меня 290 пользователей, станет 1 000 000 ...

это всё равно странное решение, время загрузки страницы тогда будет минут 10

новый ORM D7 тоже? UserTable может UF так же вытаскивать.

а он и не писал ничего про загрузку страницы, может это скрипт фоновый

Запросы в цикле, это где такому учат?

Антон Piletskiy
а он и не писал ничего про загрузку страницы, може...

Тогда нужно за одну итерацию одну пачку обрабатывать, а не весь миллион

Дмитрий Муравьёв
Запросы в цикле, это где такому учат?

Открою тайну: не всегда запросы в цикле - зло 😁

Rico- Автор вопроса
Дмитрий Муравьёв
Запросы в цикле, это где такому учат?

Откройте мне истину, как должно быть ?

Rico
Откройте мне истину, как должно быть ?

Одним запросом выбираешь коллекцию, потом в цикле делаешь что тебе надо

Rico
Откройте мне истину, как должно быть ?

$users = UserTable::query() ->addSelect('ID') ->addSelect('UF_ESIA_DATA') ->whereNotNull('UF_ESIA_DATA') ->addOrder('ID', 'DESC') ->fetchCollection();

Rico- Автор вопроса
Дмитрий Муравьёв
$users = UserTable::query() ->...

У меня вопрос был вытаскивать по 30 и чтобы страницы , после последней не возвращали бесконечно первую , как это сделать ?

Rico- Автор вопроса
Дмитрий Муравьёв
$users = UserTable::query() ->...

Несовсем понимаю в чём отличие от $arRes = \CUser::GetList( $by = "ID", ['id' => 'desc'], ['>ID' => 0], ['SELECT' => ['*', 'UF_*'], 'NAV_PARAMS' => ['nPageSize' => 30, 'iNumPage' => $i] ] ); ? просто написано по другому

Rico
Несовсем понимаю в чём отличие от $arRes = \CUs...

Отличие в том, что выбираются сразу все записи без постранички и берутся только необходимые столбцы. При малом количестве памяти сервера и очень большом количестве юзеров запуск такой выборки может привести к ошибкам нехватки памяти. Короче материал к изучению https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=5753&LESSON_PATH=3913.3516.5748.5063.5753 Смотреть в limit, offset и select. Метод \Bitrix\Main\UserTable::getList(...)

Rico- Автор вопроса
Антон Piletskiy
Отличие в том, что выбираются сразу все записи без...

В твоём примере fetchCollection() также вытаскивает все записи, проверял по занимаемой памяти , поэтому я и спользовал пагинацию чтобы сделать ограничение 'NAV_PARAMS' => ['nPageSize' => 30, 'iNumPage' => $i]

Rico
В твоём примере fetchCollection() также вытаскивае...

гугл: битрикс orm d7 постраничная навигация

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

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

Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
А чем вам питонисты не угодили?😂
.
79
Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
Всем здравствуйте! Я хотел узнать сколько стоит средняя месячная зарплата у Electron js разработчиков? Мне очень это важно и нужно, плиз помогите узнать эту инфу! Для Джунио...
U.K.
10
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
77
А дин типизация это хорошо или плохо?
Alexey
12
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Исходники плюс документация? Вы гоните)) демок хватит всем
zamtmn
11
Карта сайта