Первичный ключ (поля option_id и category_id) таблицы ms_category_options, с которой джойнится таблица ms_options в запросе из msProductData::prepareOptionListCriteria(), добавлен в GROUP BY.
Зачем это нужно?
Начиная с MySQL 5.7.5 по-умолчанию включён режим ONLY_FULL_GROUP_BY. В этом режиме мы не можем в запросе выбирать поля, которые не перечислены в GROUP BY, не определены явно в результаты группировки или для которых не применяются функции агрегации.
Проявление проблемы в miniShop2: Если товару задать несколько категорий, то в админке и на сайте не выводятся опции товара. В логе получаем ошибку MySQL:
#1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'sandbox_print.msCategoryOption.rank' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
Можно, конечно, отключить ONLY_FULL_GROUP_BY, но это уже более костыльный вариант, тем более что у самого modx с этим режимом проблем нет.
Что оно делает?
Первичный ключ (поля
option_id
иcategory_id
) таблицыms_category_options
, с которой джойнится таблицаms_options
в запросе изmsProductData::prepareOptionListCriteria()
, добавлен вGROUP BY
.Зачем это нужно?
Начиная с MySQL 5.7.5 по-умолчанию включён режим
ONLY_FULL_GROUP_BY
. В этом режиме мы не можем в запросе выбирать поля, которые не перечислены вGROUP BY
, не определены явно в результаты группировки или для которых не применяются функции агрегации.Проявление проблемы в miniShop2: Если товару задать несколько категорий, то в админке и на сайте не выводятся опции товара. В логе получаем ошибку MySQL:
Можно, конечно, отключить
ONLY_FULL_GROUP_BY
, но это уже более костыльный вариант, тем более что у самого modx с этим режимом проблем нет.