- Как обойти group by?
- Отключить ONLY_FULL_GROUP_BY
- 30 ответов
- Обновление:
- Осторожность! Результат copy_me может содержать длинный текст, который по умолчанию может быть обрезан. Убедитесь, что вы копируете весь текст!
- Добавить или удалить режимы в sql_mode
- Вернуться к GLOBAL.sql_mode
- Постоянный перезапуск сервера sql_mode с использованием файла параметров
- Значения по умолчанию sql_mode
Как обойти group by?
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Как работает group by?
Как работает group by тут? Объясните код пожалуйста) namespace consoleApp < public class.
QSqlTableModel GROUP BY, как ?
Добрый день, уважаемые специалисты! Обращаюсь к вам не по собственной воле. Судьба злодейка свела.
нет rdp! (как обойти?)+права администраторов часто как у пользователя! (как повысить?)
windows7/32 home basic edition нет рдп! (как обойти?) права администраторов часто как у.
Grossmeister, свой пример не могу показать, но например
как сделать возможным запрос:
Ну, если оно точно у всех записей одинаковое, то
Grossmeister, Привет. Чтобы не создавать новых тем, задам вопрос здесь. Допустим есть таблица T с полями t1,t2,contragent,amount. как выполнить агрегацию по полям t1,t2 и просуммировать amount, но при этом не потерять информацию о строках, где другие контрагенты? я знаю как выполнить это через UNION, но это два запроса. а как в один? Вроде как тут поможет CASE, но как им это обработать.
Group by без группировки — как?
таблица «Orders»: O_Id OrderDate OrderPrice Customer 1 2008/11/12 1000 Hansen.
Как объединить 2 запроса с разными group by ?
Как сделать один запрос из двух, чтобы каждому значению Name ставилось соответствующее значение.
Как правильно написать запрос с group by?
Выручайте! закончил работать над веб апликацией, застрял на последнм =( надо узнать сколько.
Как использовать вместе ORDER BY и GROUP BY?
Есть таблица id date than_helped_ua id_helped id date than_helped_ua.
Как сделать запрос без GROUP BY?
Я уже всю голову сломал, есть вот такой запрос SELECT school.id, nameschool, year.
Как вывести поле, которого нет в GROUP BY
Вывести: Производителя, его страну, и количество товаров его производства. Условие: общая сумма.
Источник
Отключить ONLY_FULL_GROUP_BY
Я случайно включил режим ONLY_FULL_GROUP_BY вот так:
Как мне это отключить?
30 ответов
Решение 1. Удалите ONLY_FULL_GROUP_BY из консоли mysql
Вы можете прочитать больше здесь
Решение 2. Удалите ONLY_FULL_GROUP_BY из phpmyadmin
- Откройте phpmyadmin и выберите localhost
- Нажмите на меню Переменные и прокрутите вниз для режима sql.
- Нажмите кнопку редактирования, чтобы изменить значения и удалить ONLY_FULL_GROUP_BY , и нажмите «Сохранить».
Обновление:
Чтобы сохранить текущие настройки mysql и отключить ONLY_FULL_GROUP_BY , я предлагаю посетить ваш phpmyadmin или любой другой клиент, который вы используете, и введите:
SELECT REPLACE(@@sql_mode,’ONLY_FULL_GROUP_BY’,») copy_me
Следующий результат копирования в файл my.ini .
мята : sudo nano /etc/mysql/my.cnf
ubuntu 16 и выше : sudo nano /etc/mysql/my.cnf
ubuntu 14–16 : /etc/mysql/mysql.conf.d/mysqld.cnf
Осторожность! Результат copy_me может содержать длинный текст, который по умолчанию может быть обрезан. Убедитесь, что вы копируете весь текст!
старый ответ:
Если вы хотите отключить навсегда ошибку » Выражение №N списка SELECT не входит в предложение GROUP BY и содержит неагрегированный столбец ‘db.table.COL’, который функционально не зависит от столбцов в GROUP Предложение BY; это несовместимо с sql_mode = only_full_group_by «выполните следующие действия:
- sudo nano /etc/mysql/my.cnf
Добавьте это в конец файла
sudo service mysql restart для перезапуска MySQL
Это отключит ONLY_FULL_GROUP_BY для ВСЕХ пользователей.
Будьте осторожны, используя
Это фактически очищает все включенные в данный момент режимы. Если вы не хотите вмешиваться в другие настройки, вам нужно сделать
Сначала, чтобы получить список включенных режимов, разделенных запятыми, затем УСТАНОВИТЕ его в этот список без параметра ONLY_FULL_GROUP_BY .
Дайте это попробовать:
Примечание сообщества: как указано в ответах ниже, это фактически очищает все режимы SQL, которые в настоящее время включены. Это не обязательно то, что вам нужно.
Добавление только одного режима в sql_mode без удаления существующих:
Удаление только определенного режима из sql_mode без удаления других:
В вашем случае, если вы хотите удалить только режим ONLY_FULL_GROUP_BY , используйте команду ниже:
Спасибо @cwhisperer. У меня была такая же проблема с Doctrine в приложении Symfony. Я только что добавил в свой config.yml параметр:
У меня это сработало.
Я заметил, что решение @Eyo Okon Eyo работает до тех пор, пока сервер MySQL не перезапускается, а затем восстанавливаются настройки по умолчанию. Вот постоянное решение, которое сработало для меня:
Чтобы удалить определенный режим SQL (в данном случае ONLY_FULL_GROUP_BY ), найдите текущий режим SQL:
Скопируйте результат и удалите из него то, что вам не нужно ( ONLY_FULL_GROUP_BY )
Создайте и откройте этот файл:
И напишите и вставьте в него свой новый режим SQL:
Или вы можете использовать ANY_VALUE() для подавления отклонения значения ONLY_FULL_GROUP_BY, вы можете подробнее об этом здесь
- Убунту 14.04
- mysql Ver 14.14 Distrib 5.7.16, для Linux (x86_64) с использованием оболочки EditLine
Скопировать и вставить:
В документации MySQL также указывается следующие методы:
- Установите sql-mode=» » в файле параметров, например my.cnf (операционные системы Unix) или my.ini (Windows).
- Чтобы установить режим SQL при запуске сервера через командную строку, используйте опцию —sql-mode=» » .
* Где — это список различных режимов, разделенных запятыми.
Чтобы явно очистить режим SQL, установите для него пустую строку, используя —sql-mode=»» в командной строке или sql-mode=»» в файле параметров.
Я добавил опцию sql-mode=»» в /etc/my.cnf , и она сработала.
В этом решении SO обсуждаются способы узнать, какой файл my.cnf используется MySQL.
Не забудьте перезапустить MySQL после внесения изменений.
Если вы используете WAMP. Щелкните левой кнопкой мыши значок WAMP, затем перейдите в MySQL -> Настройки MySQL -> sql-mode, а затем выберите sql-mode-> пользовательский режим.
Добавить или удалить режимы в sql_mode
MySQL 5.7.9 или новее
Чтобы добавить или удалить режим из sql_mode , вы можете использовать list_add и list_drop функций.
Чтобы удалить режим из текущего SESSION.sql_mode , вы можете использовать одно из следующего:
Чтобы удалить режим из GLOBAL.sql_mode , который сохраняется для текущей операции времени выполнения , пока служба не будет перезапущена .
MySQL 5.7.8 или более ранняя
Поскольку значение sql_mode представляет собой строку режимов CSV, вам необходимо убедиться, что строка не содержит остаточных запятых, что можно сделать с помощью TRIM(BOTH ‘,’ FROM . ) .
Чтобы удалить режим из переменной sql_mode , вам нужно использовать REPLACE() вместе с TRIM() , чтобы удалить все остаточные запятые.
Чтобы добавить режим к переменной sql_mode , вам нужно использовать CONCAT_WS(‘,’, . ) , чтобы обеспечить добавление запятой к текущим режимам, и TRIM() , чтобы убедиться, что все остаточные запятые удалены.
ПРИМЕЧАНИЕ. Изменение переменной GLOBAL не распространяется на переменную SESSION , пока не будет установлено новое соединение.
Переменная GLOBAL будет сохраняться до перезапуска работающей службы.
Переменная SESSION будет сохраняться для текущего соединения, пока соединение не будет закрыто и не будет установлено новое соединение.
Вернуться к GLOBAL.sql_mode
Поскольку SET sql_mode = ‘ONLY_FULL_GROUP_BY’; был выполнен без модификатора GLOBAL , изменение затронуло только текущее значение состояния SESSION , которое также относится к @@sql_mode . Чтобы удалить его и вернуться к глобальному значению по умолчанию при перезапуске сервера , вы можете использовать значение из @@GLOBAL.sql_mode . [sic]
Текущее значение SESSION действительно только для текущего соединения. Повторное подключение к серверу вернет значение обратно к GLOBAL значение.
Чтобы вернуть текущее значение состояния сеанса к текущему глобальному значению, вы можете использовать одно из следующих действий:
Измените значение SESSION.sql_mode на ONLY_FULL_GROUP_BY
Вернуть значение SESSION.sql_mode к значению GLOBAL.sql_mode
Постоянный перезапуск сервера sql_mode с использованием файла параметров
Чтобы установить режим SQL при запуске сервера используйте параметр —sql-mode=»modes» в команде строка или sql-mode=»modes» в файле параметров, таком как my.cnf (Unix операционных систем) или my.ini (Windows). [sic]
См. Свою версию MySQL, чтобы определить поддерживаемый и используемый по умолчанию режимы.
MySQL> = 5.7.5, для получения дополнительной информации.
Синтаксис для указания опций в файле опций аналогичен синтаксису синтаксис командной строки. Однако в файле параметров вы опускаете ведущие два тире от имени параметра, и вы указываете только один вариант для каждого линия. Например, —quick и —host=localhost в командной строке. должны быть указаны как quick и host=localhost в отдельных строках в файл опций. Чтобы указать вариант формы —loose-opt_name в файл опций, запишите его как loose-opt_name .
Значение может быть заключено в одинарные кавычки или двойные кавычки, что полезно, если значение содержит # комментарий персонажа.
Значения по умолчанию sql_mode
Поскольку значения версии для документации MySQL были удалены, я добавил их сюда для справки.
MySQL> = 5.7.8, = 5.7.5, = 5.6.6, 18
В MySQL 5.7 и Ubuntu 16.04 отредактируйте файл mysql.cnf.
Включите sql_mode, как показано ниже, и сохраните файл.
Обратите внимание, что в моем случае я удалил режим STRICT_TRANS_TABLES и ONLY_FULL_GROUP_BY.
При этом конфигурация режима будет сохранена навсегда. По-другому, если вы просто обновите @@ sql_mode через MySQL, потому что он будет сброшен при перезапуске машины / службы.
После этого, чтобы измененная конфигурация заработала, перезапустите службу mysql:
Попробуйте получить доступ к mysql:
Если вы можете войти в систему и получить доступ к консоли MySQL, это нормально. Большой!
НО , если вы, как и я, столкнетесь с ошибкой «неизвестная переменная sql_mode» , которая указывает, что sql_mode является параметром для mysqld , вам придется вернуться, снова отредактировать файл mysql.cnf и изменить [mysql] на [mysqld] . Перезапустите службу MySQL и выполните последний тест, пытаясь войти в консоль MySQL. Вот!
Вот что я сделал, чтобы исправить на верстаке Mysql:
До того, как я получил текущее значение с помощью следующей команды
Позже я удалил ключ ONLY_FULL_GROUP_BY из списка и вставил следующую команду
На моем sql (версия 5.7.11, работающая в Mac OS X) это работает для меня на клиенте оболочки mysql:
Согласно документации MySQL 5.6 sql_mode по умолчанию
Пустая строка в MySQL 5.6.5 и обратно NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES в 5.6.6 +
Для Mac OS Mojave (10.14) Открыть терминал
Горячие клавиши для сохранения и выхода из nano: Ctrl+x и y и Enter
Примечание : Вам может потребоваться обновить mysql-5.7.24-macos10.14-x86_64 в этих командах, просто проверьте правильное имя папки, которое у вас есть в /usr/local/
Надеюсь, это кому-то поможет!
Если вы используете MySQL 8.0.11, вам необходимо удалить ‘NO_AUTO_CREATE_USER’ из sql-режима.
Добавьте следующую строку в заголовок файла /etc/mysql/my.cnf и [mysqld]
Я использую doctrine и добавил driverOptions в свой doctrine.local.php:
В phpmyadmin пользователю необходимо активировать СУПЕР в привилегиях.
Я работаю с mysql и зарегистрирован с пользователем root, решение, которое работает для меня, следующее:
mysql> УСТАНОВИТЬ СЕССИЮ sql_mode = (ВЫБРАТЬ ЗАМЕНИТЬ (@@ sql_mode, ‘ONLY_FULL_GROUP_BY’, »));
Для тех, у кого запущен VPS / сервер с cPanel / WHM , вы можете сделать следующее, чтобы навсегда отключить ONLY_FULL_GROUP_BY
Вам нужен root-доступ (либо на VPS, либо на выделенном сервере)
Введите WHM как root и запустите phpMyAdmin
Нажмите «Переменные», найдите sql_mode , нажмите «Изменить» и скопируйте всю строку внутри этого текстового поля.
Например скопируйте это:
Подключитесь к вашему серверу через SFTP — SSH (root) и загрузите файл /etc/my.cnf
Откройте в текстовом редакторе файл my.cnf на локальном ПК и вставьте в него (в разделе [mysqld] ) всю строку, которую вы скопировали на шаге (2), но удалите ONLY_FULL_GROUP_BY,
Например вставьте это:
Сохраните файл my.cnf и загрузите его обратно в /etc/
Введите WHM, перейдите в «WHM> Перезапустить службы> SQL Server (MySQL)» и перезапустите службу.
Это постоянное решение для MySql 5.7+ в Ubuntu 14+:
Если вы можете войти в систему без ошибок — все готово.
Начиная с MySQL 5.7.x, режим sql по умолчанию включает ONLY_FULL_GROUP_BY . (До 5.7.5 MySQL не обнаруживал функциональную зависимость, и ONLY_FULL_GROUP_BY по умолчанию не включен).
ONLY_FULL_GROUP_BY : запросы недетерминированного группирования будут отклонены.
Дополнительные сведения см. В документации по sql_mode.
Вы можете использовать любой из следующих способов, чтобы изменить sql_mode
Метод 1:
Проверьте значение sql_mode по умолчанию:
Удалите ONLY_FULL_GROUP_BY из консоли, выполнив следующий запрос:
Метод 2:
Доступ к phpmyadmin для редактирования вашего sql_mode
- Войдите в phpmyadmin и откройте localhost
- Вверху Переменные присутствуют вверху в пунктах меню и выполняют поиск sql mode
- Нажмите кнопку редактирования, чтобы удалить ONLY_FULL_GROUP_BY и сохранить
Для MySql 8 вы можете попробовать это. (не тестировался на 5.7. Надеюсь, он там тоже работает)
Сначала откройте этот файл
sudo vi /etc/mysql/my.cnf и вставьте ниже код в конец вышеуказанного файла
Затем перезапустите mysql, запустив этот sudo service mysql restart
Источник