Ошибка Dkan Drupal после установки модуля разрешения полей

#mysql #database #drupal #dkan

#mysql #База данных #drupal #dkan

Вопрос:

После установки модуля разрешений полей Drupal в DKAN всякий раз, когда я пытаюсь просмотреть свой каталог наборов данных в DKAN, отображается ошибка. Мне удобно просматривать отдельные наборы данных, переходя по их отдельной гиперссылке.

Ошибка: SQLSTATE[HY000]: Общая ошибка: 3065 Выражение # 1 предложения ORDER BY отсутствует в списке ВЫБОРА, столбец ссылок ‘dkan_opendatatest.t.changed’ которого нет в списке ВЫБОРА: это несовместимо с DISTINCT

Есть идеи о том, как решить эту проблему?

Ответ №1:

Вероятно, это представление, которое управляет страницей поиска. В раскрывающемся списке ожидается, что поле будет списком выбора, но изменение поля заставляет это представление генерировать SQL-запрос, который не поддерживается MySQL.

Вероятно, вы можете исправить это, отредактировав представление в «/ admin/structure /views /view /dkan_datasets /edit /panel_pane_1» и изменив «Индексированный узел: дата изменена» в «Критерии сортировки». Не уверен сразу, какой правильный параметр «Критерии сортировки» будет с вашим изменением, но, надеюсь, вы можете выяснить это оттуда, изменив «Критерии сортировки». Возможно, удалите и повторно добавьте поле «изменено».

Ответ №2:

Я также получил аналогичные ошибки в Drupal при посещении страниц admin / content и admin / people: Исключение в People [user_admin_people]: SQLSTATE [HY000]: Общая ошибка: 3065 Выражение # 1 предложения ORDER BY отсутствует в списке ВЫБОРА, столбец ссылок ‘mycmsschema.users_field_data.created’ которого нет в списке ВЫБОРА; это несовместимо с DISTINCT

Запрос, который он выводил, отлично работал в Mysql Workbench, но не выполнялся в Drupal8 при посещении этих страниц.

Mysql 5.7, похоже, не любит запросы Drupal8 (и, возможно, 7 запросов тоже, но не проверял). Необходимо понизить версию до Mysql 5.6 (поэтому по умолчанию не используются сверхстрогие настройки sql_mode, такие как ONLY_FULL_GROUP_BY, которые используются по умолчанию в Mysql 5.7) или перейти в core/lib/Drupal/Core/Database/Driver/mysql/Connection.php и изменить:

  /*
      'sql_mode' => "SET sql_mode = 'ANSI,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY'",
      */
  

Для:

 'sql_mode' => "SET sql_mode = 'ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER'",
  

что сработало для меня.
Примечание: думал, что удаление только ONLY_FULL_GROUP_BY должно было быть исправлено, но, похоже, мне также нужно было удалить часть rest.