Добавлю свое решение.
Можно добавить в catalog/model/catalog/product.php
Но как и писали выше, правильнее добавить поля и пересчитывать по cron
При большом количестве товаров запрос становится довольно тяжелым.
Параметры
$data = array(
'filter_category_id' => $category_id,
'filter_sub_category' => true
);
$type = "max"; // min
public function getMinMaxPrice($data = array(), $type)
{
$sql_form_form = "";
if (! empty($data['filter_category_id'])) {
if (! empty($data['filter_sub_category'])) {
$sql_form .= " FROM " . DB_PREFIX . "category_path cp LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (cp.category_id = p2c.category_id)";
} else {
$sql_form .= " FROM " . DB_PREFIX . "product_to_category p2c";
}
$sql_form .= " LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id)";
} else {
$sql_form .= " FROM " . DB_PREFIX . "product p";
}
$sql_form .= " WHERE p.status = '1' AND p.date_available <= NOW()";
if (! empty($data['filter_category_id'])) {
if (! empty($data['filter_sub_category'])) {
$sql_form .= " AND cp.path_id = '" . (int) $data['filter_category_id'] . "'";
} else {
$sql_form .= " AND p2c.category_id = '" . (int) $data['filter_category_id'] . "'";
}
}
$sql = "";
if ($type == "max") {
$sql = "SELECT GREATEST( MAX(price), ( SELECT IFNULL(MAX(price),0) ";
}
if ($type == "min") {
$sql = "SELECT LEAST( MIN(price), ( SELECT IFNULL(MIN(price),9999999999)";
}
$sql .= "FROM oc_product_special WHERE product_id IN (SELECT p.product_id ";
$sql .= $sql_form;
$sql .= ") ) ) as price";
$sql .= $sql_form;
$query = $this->db->query($sql);
return $query->row['price'];
}