Как нельзя делать определение максимальной и минимальной цен товара в разделе
Материал из Umicms
Часто, по техническому заданию, необходимо в фильтре по товарам, отобразить минимальную и максимальную цену для товаров, которые находятся в текущем разделе. Совершенно точно, нельзя вычислять данные параметры, перебором цены каждого товара в разделе, через 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; }
