Добрый день. Задача стоит сгрупировать выборку из highload инфоблока по двум полям.
Код вот такой:
$arSort = array(
"UF_DATE_FROM" => "ASC"
);
$arrFilter = array(
">=UF_DATE_FROM" => date("d.m.Y H:i:s", time() - 3600 * 24 * 8),
"<=UF_DATE_TO" => date("d.m.Y H:i:s", time() + 3600 * 24 * 8),
);
$arGroup = array(
"UF_NAME",
"UF_CHANNEL"
);
$Query = new \Bitrix\Main\Entity\Query($Entity);
$Query->setSelect(array('*'));
$Query->setFilter($arrFilter);
$Query->setGroup($arGroup);
$Query->setOrder($arSort);
В результате путем дампинга промежуточных данных в ядре определил, что в конце концов битрикс выплевывает вот такой sql запрос:
SELECT
`t_vprogramm`.`ID` AS `ID`,
`t_vprogramm`.`UF_NAME` AS `UF_NAME`,
`t_vprogramm`.`UF_DATE_FROM` AS `UF_DATE_FROM`,
`t_vprogramm`.`UF_DATE_TO` AS `UF_DATE_TO`,
`t_vprogramm`.`UF_SECTION` AS `UF_SECTION`,
`t_vprogramm`.`UF_CHANNEL` AS `UF_CHANNEL`,
`t_vprogramm`.`UF_RATING` AS `UF_RATING`,
`t_vprogramm`.`UF_ICONS` AS `UF_ICONS`,
`t_vprogramm`.`UF_YEAR` AS `UF_YEAR`,
`t_vprogramm`.`UF_GANRE` AS `UF_GANRE`,
`t_vprogramm`.`UF_TEXT_RU` AS `UF_TEXT_RU`,
`t_vprogramm`.`UF_TRAILER` AS `UF_TRAILER`,
`t_vprogramm`.`UF_PERSON` AS `UF_PERSON`,
`t_vprogramm`.`UF_LIVE` AS `UF_LIVE`,
`t_vprogramm`.`UF_TYPE_SPORT` AS `UF_TYPE_SPORT`,
`t_vprogramm`.`UF_COUNTRY` AS `UF_COUNTRY`,
`t_vprogramm`.`UF_NAME_EU` AS `UF_NAME_EU`,
`t_vprogramm`.`UF_TEXT_EU` AS `UF_TEXT_EU`,
`t_vprogramm`.`UF_NAME_KZ` AS `UF_NAME_KZ`,
`t_vprogramm`.`UF_TEXT_KZ` AS `UF_TEXT_KZ`
FROM `tv_programm` `t_vprogramm`
WHERE `t_vprogramm`.`UF_DATE_FROM` >= '2015-12-16 18:58:04'
AND `t_vprogramm`.`UF_DATE_TO` <= '2016-01-01 18:58:04'
AND UPPER(`t_vprogramm`.`UF_NAME`) like upper('%Новости%')
GROUP BY `t_vprogramm`.`UF_CHANNEL`, `t_vprogramm`.`UF_NAME`, `t_vprogramm`.`ID`, `t_vprogramm`.`UF_DATE_FROM`, `t_vprogramm`.`UF_DATE_TO`, `t_vprogramm`.`UF_SECTION`, `t_vprogramm`.`UF_RATING`, `t_vprogramm`.`UF_ICONS`, `t_vprogramm`.`UF_YEAR`, `t_vprogramm`.`UF_GANRE`, `t_vprogramm`.`UF_TEXT_RU`, `t_vprogramm`.`UF_TRAILER`, `t_vprogramm`.`UF_PERSON`, `t_vprogramm`.`UF_LIVE`, `t_vprogramm`.`UF_TYPE_SPORT`, `t_vprogramm`.`UF_COUNTRY`, `t_vprogramm`.`UF_NAME_EU`, `t_vprogramm`.`UF_TEXT_EU`, `t_vprogramm`.`UF_NAME_KZ`, `t_vprogramm`.`UF_TEXT_KZ`
ORDER BY `t_vprogramm`.`UF_DATE_FROM` ASC
LIMIT 0, 50
Как видно, битрикс пытается сгруппировать запрос по всем существующим полям в таблице. Правда поля в нужном порядке, но я все равно не понимаю зачем это нужно.
Основная проблема в том, что записи в конце концов не группируются или группируются не правильно, потому что записи с одинаковым полем "UF_NAME" все равно попадаются. Даже если я делаю группировку только по полю UF_NAME. Что я делаю не так?