Как нельзя делать определение максимальной и минимальной цен товара в разделе

Материал из Umicms
Версия от 04:17, 5 декабря 2011; VITL' (обсуждение | вклад) (Новая страница: «Часто, по техническому заданию, необходимо в фильтре по товарам, отобразить минимальную и …»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

Часто, по техническому заданию, необходимо в фильтре по товарам, отобразить минимальную и максимальную цену для товаров, которые находятся в текущем разделе. Совершенно точно, нельзя вычислять данные параметры, перебором цены каждого товара в разделе, через php-объект страницы, к примеру:

//поиск Страниц, получение результатов = массиву из объектов getElement
$pages = new selector('pages');
$pages->where('hierarchy')->page($parent_id)->childs(1);
$min = 0;
$max = 0;
foreach ($pages as $page)
// получение от каждой страницы значения поля price, и запись его в переменные $min и $max
}

В разделе может быть очень много страниц, 500-1000 и более, поэтому в данном случае сервер может просто зависнуть или будет очень сильно тормозить. Приемлемым вариантом, для решения данной задачи считается использование одного sql-запроса, пример для XSLT-шаблонизатора:

public function min_and_max($category_id){
$category_id = (int) $category_id;
// 193 – filed_id поля price
 $sql = "SELECT MAX( oc_193.float_val ), MIN( oc_193.float_val )
FROM cms3_hierarchy h, cms3_object_content oc_193
WHERE h.obj_id = oc_193.obj_id
AND h.rel = {$category_id}
AND h.is_deleted = '0'
AND h.is_active = '1'
AND oc_193.field_id =193";

$result = l_mysql_query($sql);
list($max_price, $min_price)= mysql_fetch_row($result);
$block_arr = Array();
$block_arr['min'] = $min_price;
$block_arr['max'] = $max_price;
return $block_arr;
}