Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Группировка при выборе записей из highload инфоблоков

00 голосов
0
Добрый день. Задача стоит сгрупировать выборку из 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. Что я делаю не так?

спросил 24 Дек, 15 от Andrey (120 баллов)

Ваш ответ

Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.