ORM Битрикс (D7): быстрое получение количества элементов выборки без дополнительных запросов
16.05.2019
Вся магия в директиве SQL_CALC_FOUND_ROWS и функции SQL_CALC_FOUND_ROWS(), которая выдает количество записей предыдущего запроса с директивой, без учета установленного лимита.
В итоге можем получить записи нужной нам сущности и организовать постраничную навигацию БЕЗ использования двух запросов: запрос количества, потом запрос записей.
Директива SQL_CALC_FOUND_ROWS работает только в MySQL.
$params = array(
'filter' => array(
'ACTIVE' => 'Y',
'>DATE_CREATE' => \Bitrix\Main\Type\DateTime::createFromTimestamp(time() - 86400))
),
'select' => array(
new \Bitrix\Main\Entity\ExpressionField('FOUND_ROWS', 'SQL_CALC_FOUND_ROWS %s','ID'),
'ID',
'NAME',
),
'order' => array('ID'=>'asc'),
'limit' => 10,
);
$rs = \Bitrix\Iblock\ElementTable::getList($params)->fetchAll();
$totalCount = 0;
if ($resultTotal = \Bitrix\Main\Application::getConnection()->queryScalar('SELECT FOUND_ROWS() as TOTAL'))
{ // более быстрое получение количества строк
$totalCount = $resultTotal;
}
← Вернуться к списку заметок