Ошибка HostCMS 6.8.4 после установки на новый сервер

Иногда требуется переносить сайты на другие веб-сервера, иногда разворачивать систему управления сайтом, на новых VPS со свежей установленной операционной системой. Установка идет как обычно, нечего не предвещает проблем, PHP 7.0.32, MySQL 5.7.24, GD: 2.1.1, PCRE: 8.38, всё в наличии Multibyte String, JSON, SimpleXML, Iconv. Всё подходит под системные требования HostCMS, но возникает ошибка: Exception: Query error 42000: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated что делать?

Exception: Query error 42000: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘hostcms_db.shop_discounts.value’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by. Query: SELECT MIN(t.absolute_price) AS `min`, MAX(t.absolute_price) AS `max` FROM (SELECT IF (`shop_items`.`shop_currency_id` = ‘3’, IF (shop_discounts.value, IF(shop_discounts.type, price * 53 — shop_discounts.value, price * (100 — shop_discounts.value) * 53 / 100), shop_items.price * 53), IF (`shop_items`.`shop_currency_id` = ‘2’, IF (shop_discounts.value, IF(shop_discounts.type, price * 60 — shop_discounts.value, price * (100 — shop_discounts.value) * 60 / 100), shop_items.price * 60), IF (`shop_items`.`shop_currency_id` = ‘1’, IF (shop_discounts.value, IF(shop_discounts.type, price * 1 — shop_discounts.value, price * (100 — shop_discounts.value) * 1 / 100), shop_items.price * 1), price))) AS `absolute_price` FROM `shop_items` LEFT OUTER JOIN `shop_item_discounts` ON `shop_items`.`id` = `shop_item_discounts`.`shop_item_id` LEFT OUTER JOIN `shop_discounts` ON `shop_item_discounts`.`shop_discount_id` = `shop_discounts`.`id` AND ( `shop_discounts`.`end_datetime` >= ‘2018-11-12 22:46:10’ OR `shop_discounts`.`end_datetime` = ‘0000-00-00 00:00:00’ AND `shop_discounts`.`start_datetime` <= ‘2018-11-12 22:46:10’ ) WHERE `shop_items`.`deleted` = 0 AND `shop_items`.`shop_id` = ‘3’ AND `shop_items`.`active` = 1 AND ( `shop_items`.`shop_group_id` IN (‘604’) AND `shop_items`.`shortcut_id` = 0 OR `shop_items`.`id` IN (SELECT `shop_items`.`shortcut_id` FROM `shop_items` WHERE `shop_items`.`deleted` = 0 AND `shop_items`.`active` = 1 AND `shop_items`.`shop_group_id` IN (‘604’) AND `shop_items`.`shortcut_id` > 0 AND ( `shop_items`.`start_datetime` < ‘2018-11-12 22:46:10’ OR `shop_items`.`start_datetime` = ‘0000-00-00 00:00:00’ ) AND ( `shop_items`.`end_datetime` > ‘2018-11-12 22:46:10’ OR `shop_items`.`end_datetime` = ‘0000-00-00 00:00:00’ ) AND `shop_items`.`siteuser_group_id` IN (0, -1)) ) GROUP BY `shop_items`.`id`) AS `t`
36 modules/core/exception.php
569 modules/core/database/pdo.php
80 modules/core/querybuilder/statement.php
249 hostcmsfiles/lib/lib_47/lib_config_47.php
193 templates/template15/template.htm
96 modules/template/model.php
166 modules/core/page.php
207 templates/template13/template.htm
96 modules/template/model.php
166 modules/core/page.php
511 modules/core/command/controller/default.php
195 modules/core/router/route.php
239 index.php

Ситуация довольно простая, если у Вас есть доступ по SSH к серверу, или вы можете изменить конфигурационный файл находящийся по адресу: /etc/mysql/my.cnf

Открывает его, ищем секцию [mysqld], дописываем в неё одну из записей на выбор:

  • Или как написано в документации CMS: sql-mode=»»
  • Или такую строчку:
    sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIO

После этого перезапускаем службу MySQL (service mysql restart), заходим на сайт и наблюдаем отсутствие ошибки.