Всем привет.
Есть представление. Выводит количество комментариев пользователя.
Под docker4druapal все работает, но на реальном сервере показывает ошибку.
Представление.
Его запрос.
FROM
{comment_field_data} "comment_field_data"
LEFT JOIN {users_field_data} "users_field_data_comment_field_data" ON comment_field_data.uid = users_field_data_comment_field_data.uid
LEFT JOIN {comment__comment_body} "comment__comment_body" ON comment_field_data.cid = comment__comment_body.entity_id AND (comment__comment_body.deleted = '0' AND comment__comment_body.langcode = comment_field_data.langcode)
WHERE "users_field_data_comment_field_data"."uid" = '1'
Ошибка.
SQLSTATE[42000]: Syntax error or access violation: 1140 In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'dbname.comment_field_data.cid'; this is incompatible with sql_mode=only_full_group_by: SELECT "comment_field_data"."cid" AS "cid", "users_field_data_comment_field_data"."uid" AS "users_field_data_comment_field_data_uid", COUNT(comment__comment_body.comment_body_value) AS "comment__comment_body_comment_body_value", COUNT(comment__comment_body.delta) AS "comment__comment_body_delta", COUNT(comment__comment_body.langcode) AS "comment__comment_body_langcode", COUNT(comment__comment_body.bundle) AS "comment__comment_body_bundle", COUNT(comment__comment_body.comment_body_format) AS "comment__comment_body_comment_body_format" FROM "comment_field_data" "comment_field_data" LEFT JOIN "users_field_data" "users_field_data_comment_field_data" ON comment_field_data.uid = users_field_data_comment_field_data.uid LEFT JOIN "comment__comment_body" "comment__comment_body" ON comment_field_data.cid = comment__comment_body.entity_id AND (comment__comment_body.deleted = :views_join_condition_0 AND comment__comment_body.langcode = comment_field_data.langcode) WHERE "users_field_data_comment_field_data"."uid" = :db_condition_placeholder_2; Array ( [:db_condition_placeholder_2] => 1 [:views_join_condition_0] => 0 )
Не слишком большое насилие над БД?
Может постараться использовать статистику комментария для данного действа?
Комментарии
Потому что разные настройки SQL-сервера. На одном включено sql_mode=only_full_group_by, а на другом выключено.
Скорее всего, именно это.
Ну так оно ж английским по белому прям в сообщении об ошибке написано
Есличё, я практически ничего не понимаю в версиях и разновидностях SQL-серверов, я просто очень хорошо умею читать сообщения об ошибках
Версии СУБД (mysql, mariadb) на локалке и на сервере одинаковые? Если нет, то сделай на локалке такую же версию, как на сервере и проверь еще раз
Как врубить этот sql_mode? И посмотреть какой выставлен сейчас?
Обратиться в поддержку хостинга, если это shared
https://stackoverflow.com/questions/23921117/disable-only-full-group-by
PS Его надо не врубить, а вырубить.
Админ-баши сервера отвечает
"Глобальная переменная sql_mode пустая, но вы можете выставлять её самостоятельно для своей сессии."
Глобально выставить не получается:
ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) for this operation
Если для сессии то как?
SET SESSION sql_mode = 'modes';
- - так? что тут вписывать вместо 'modes' ?Попробовал так:
Query OK, 0 rows affected (0,00 sec)
Но вьюха все равно ошибку выдает.
Посмотри патчик вот здесь, может поможет. Насколько я понял, Друпал сам устанавливает всякие параметры SQL при инициализации сессии БД, так что всё, что ты установишь вне Друпала, будет им затёрто.
Спасибо, marassa! С патчем работает.