function getAvailableElementsCount(array $arSections)
{
$res = \Bitrix\Iblock\SectionElementTable::getList(array(
'select' => array('CNT', 'IBLOCK_SECTION_ID'),
'filter' => array(
'IBLOCK_SECTION_ID' => $arSections,
'PRODUCT.AVAILABLE' => 'Y',
'ELEMENT.ACTIVE' => 'Y'
),
'runtime' => array(
new \Bitrix\Main\Entity\ExpressionField('CNT', 'COUNT(*)'),
'PRODUCT' => array(
'data_type' => '\Bitrix\Catalog\ProductTable',
'reference' => array(
'=this.IBLOCK_ELEMENT_ID' => 'ref.ID'
),
'join_type' => 'left'
),
'ELEMENT' => array(
'data_type' => '\Bitrix\Iblock\ElementTable',
'reference' => array(
'=this.IBLOCK_ELEMENT_ID' => 'ref.ID'
),
'join_type' => 'left'
)
)
));
return $res->fetchAll();
}
|
По идее сравнивать в текущем варианте неправильно, но вот результат:
CIBlockSection
ORM
Код:
CIBlockSection
array(3) {
["ID"]=>
string(3) "702"
["SORT"]=>
string(3) "100"
["ELEMENT_CNT"]=>
string(4) "6840"
}
array(3) {
["ID"]=>
string(3) "835"
["SORT"]=>
string(4) "2440"
["ELEMENT_CNT"]=>
string(4) "5396"
}
float(0.022021)
|
ORM
array(2) {
[0]=>
array(2) {
["CNT"]=>
string(4) "1279"
["IBLOCK_SECTION_ID"]=>
string(3) "702"
}
[1]=>
array(2) {
["CNT"]=>
string(3) "271"
["IBLOCK_SECTION_ID"]=>
string(3) "835"
}
}
float(0.01721) |
Код:
\Bitrix\Main\Loader::includeModule('iblock');
\Bitrix\Main\Loader::includeModule('catalog');
$s1 = microtime();
$res = \CIBlockSection::GetList(array("SORT"=>"ASC"), array('ID' => array(702,835)), true, array('ID'));
while($sc = $res->Fetch())
{
var_dump($sc);
}
var_dump(microtime()-$s1);
$s2 = microtime();
$res = \Bitrix\Iblock\SectionElementTable::getList(array(
'select' => array('CNT', 'IBLOCK_SECTION_ID'),
'filter' => array(
'IBLOCK_SECTION_ID' => array(702,835),
'PRODUCT.AVAILABLE' => 'Y',
'ELEMENT.ACTIVE' => 'Y'
),
'runtime' => array(
new \Bitrix\Main\Entity\ExpressionField('CNT', 'COUNT(*)'),
'PRODUCT' => array(
'data_type' => '\Bitrix\Catalog\ProductTable',
'reference' => array(
'=this.IBLOCK_ELEMENT_ID' => 'ref.ID'
),
'join_type' => 'left'
),
'ELEMENT' => array(
'data_type' => '\Bitrix\Iblock\ElementTable',
'reference' => array(
'=this.IBLOCK_ELEMENT_ID' => 'ref.ID'
),
'join_type' => 'left'
)
)
));
var_dump($res->fetchAll());
var_dump(microtime()-$s2);
|