Оптимизация OpenCart: Избыточная сортировка продуктов по наименованию

По умолчанию в OpenCart доступна сортировка четырёх видов: по умолчанию (по порядку), по наименованию продукта, по цене и по наименованию модели.

Сортировка продуктов (программно) выполняется путём выполнения сформированного SQL-запроса в модели ./catalog/model/catalog/product.php в функциях getProducts и getProductSpecials.

Избыточность сортировки заключается в том, что при выборе сортировки по наименованию, сортировка в запросе получится следующая: ORDER BY LCASE(pd.name) ASC, LCASE(pd.name) ASC.

Чтобы исключить дополнительную, пусть и незначительную, нагрузку на базу, часть кода в перечисленных выше функциях

...  
if (isset($data['order']) && ($data['order'] == 'DESC')) {
   $sql .= " DESC, LCASE(pd.name) DESC";
} else {
   $sql .= " ASC, LCASE(pd.name) ASC";
}
...


необходимо заменить на

if (isset($data['order']) && ($data['order'] == 'DESC')) {
   $sql .= " DESC";
   if (isset($data['sort']) && $data['sort'] != 'pd.name') $sql .= ", LCASE(pd.name) DESC";
} else {
   $sql .= " ASC";
   if (isset($data['sort']) && $data['sort'] != 'pd.name') $sql .= ", LCASE(pd.name) ASC";
}


Хотелось бы отметить тот факт, что такие мелочи в купе дают значительную нагрузку на сервер и в конечном итоге успешный продукт становится тяжёлым и неповоротливым.
Теги:
CS-CART, GETPRODUCTS, GETPRODUCTSPECIALS, OPTIMIZATION, СОРТИРОВКА
Добавлено: 26 Февраля 2015 07:07:07 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...