Нормального способа узнать количество пользователей подходящих по фильтру не существует. Официально способы подсчета вообще не документированы, но есть по меньшей мере два таких.
Первый есть в пользовательских комментариях к описанию функции CUser::GetList и реализуется через выборку одного элемента при постраничной навигации:
Второй, по сути идентичный, который работает за счет добавленного начиная с версии 11.0.14 параметра nTopCount и судя по исходному коду CUser::GetList единственный который реально делает SELECT COUNT *, а не SQL_CALC_FOUND_ROWS/FOUND_ROWS:
Первый есть в пользовательских комментариях к описанию функции CUser::GetList и реализуется через выборку одного элемента при постраничной навигации:
$rsUsers = CUser::GetList(
$arOrder,
$cdv,
array(
"LAST_LOGIN_1" => $DATE_LAST_LOGIN
),
array(
'NAV_PARAMS' => array(
"nPageSize" => 1,
"bDescPageNumbering" => "N",
"bShowAll" => "N"
)
)
);
echo $rsUsers->NavRecordCount;
Второй, по сути идентичный, который работает за счет добавленного начиная с версии 11.0.14 параметра nTopCount и судя по исходному коду CUser::GetList единственный который реально делает SELECT COUNT *, а не SQL_CALC_FOUND_ROWS/FOUND_ROWS:
$rsUsers = CUser::GetList(
$arOrder,
$cdv,
array(),
array(
'NAV_PARAMS' => array(
"nTopCount" => 0
)
)
);
echo $rsUsers->NavRecordCount;
Стоит отметить, что и том и другом случае, выбирается один элемент, что является избыточным.
Комментариев нет:
Отправить комментарий