пятница, 25 октября 2013 г.

Как получить количество пользователей

Нормального способа узнать количество пользователей подходящих по фильтру не существует. Официально способы подсчета вообще не документированы, но есть по меньшей мере два таких.
Первый есть в пользовательских комментариях к описанию функции 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;

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

Комментариев нет:

Отправить комментарий