Цитата |
---|
ghostamonsta пишет: через CPrice:GetList с группировкой или через что=то другое? |
Попытался проверить свою теорию, вначале предполагал, что можно сгруппировать в функции CIblockElement::GetList(), а нет, группировка по CATALOG_GROUP_3 приводит к ошибке MySQL, видимо, группирует только по свойствам инфоблока. Пока из очевидных осталось только решение для каждого товара находить отдельно минимум и максимум. В итоге группировка выглядит так:
Код |
---|
$min = CPrice::GetList(array(), array('PRODUCT_ID'=>$ids), array('MIN'=>"PRICE"))->Fetch();
$max = CPrice::GetList(array(), array('PRODUCT_ID'=>$ids), array('MAX'=>"PRICE"))-Fetch(); |
Здесь $ids - это либо 1, либо множество ID товаров, для которых надо найти минимум. Если их будет множество, то результат все равно будет 1 - минимальная цена из всех товаров. В качестве ID здесь используются не ID товаров, а ID товарных предложений из соответствующего инфоблока.
Это не очень правильно с точки зрения оптимизации, на каждый товар будет приходиться по 2 запроса к БД. Если вам постоянно надо эти запросы делать, то у товара лучше завести 2 свойства ИБ, соответственно максимум и минимум и обновлять их по событию изменения цены товара OnPriceUpdate. Другой момент еще, поиск минимума и максимума происходит по значению цены без конвертации курсов валют, так что если у вас мультивалютный магазин, то будут проблемы, потому что по значению $100 будет меньше 200 рублей.