SQLSTATE [42000]: ошибка синтаксиса или нарушение прав доступа: 1055 Выражение №3 списка SELECT не находится в предложении GROUP BY и содержит неагрегатные
когда я обновил свой ubuntu с 15.10 до 16.04, у меня есть этот erro в моем проекте yii2
SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #3
of SELECT list is not in GROUP BY clause and contains nonaggregated column
'iicityYii.opportunity_conditions.money' which is not functionally dependent
on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
Выполняемый SQL:
SELECT SUM(oc.money),op.id,oc.money,
op.mantaghe,
op.`time`, op.`id`, `op`.`logo`,
`pd`.`user_id`, `op`.`name`,
`pd`.`co_name`, `op`.`address`,
`op`.`project_type_id`, `op`.`state_id`
FROM `opportunity` op
INNER JOIN `profile_details` pd ON op.user_id=pd.user_id
INNER JOIN `opportunity_conditions` oc ON op.id=oc.opportunity_id
GROUP BY `op`.`id`
ORDER BY `op`.`id` DESC
как решить мою проблему?
Ответы
Ответ 1
В вашем выборе у вас есть совокупная функция сумма и набор имен столбцов, ошибка говорит вам, что вы не указали правильный список имен столбцов в предложении group by. может быть, вам следует добавить больше имен столбцов в группу, вероятно, связанных с таблицей profile_details, opportunity_conditions
У вас также есть ,(opportunity.id),(opportunity_conditions.money), (opportunity.mantaghe),
почему ()
если вам нужна сумма, вы должны добавить сумму ко всем столбцам
sum(opportunity.id), sum(opportunity_conditions.money),
сумма (opportunity.mantaghe),
в противном случае, если это нормальные столбцы, вы должны использовать обычный синтаксис без()
opportunity.id, opportunity_conditions.money,opportunity.mantaghe,
Я попытался переписать возможный запрос
SELECT SUM(opportunity_conditions.money),
'opportunity'.'id',
'opportunity_conditions.money',
'opportunity.mantaghe',
'opportunity'.'time',
'opportunity'.'logo',
'profile_details'.'user_id',
'opportunity'.'name',
'profile_details'.'co_name',
'opportunity'.'address',
'opportunity'.'project_type_id',
'opportunity'.'state_id'
FROM 'opportunity'
INNER JOIN 'profile_details' ON 'opportunity'.'user_id'= 'profile_details'.'user_id' 7
INNER JOIN 'opportunity_conditions' ON 'opportunity'.'id'='opportunity_conditions'.'opportunity_id'
GROUP BY'opportunity'.'id', 'profile_details'.'user_id','opportunity_conditions.money',
ORDER BY 'opportunity'.'id' DESC
с группой по имени основного столбца (я надеюсь)
GROUP BY'opportunity'.'id', 'profile_details'.'user_id','opportunity_conditions.money',
Ответ 2
Запустите:
sudo mysql -u root -p
И измените режим SQL для своего экземпляра MySQL Server:
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Другой способ - использовать конфиги MySQL. Перейдите в /etc/mysql/my.cnf
:
Ответ 3
В laravel с MySql перейдите в файл config/database.php, и в массиве MySql он сменится на режим строгого режима на false.
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => false, //from true
'engine' => null,
],
],
Ответ 4
Пожалуйста, просто скопируйте эту строку и запустите ее. это сработало для меня.
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Youtube видео, чтобы исправить это
Ответ 5
Решение состоит в том, чтобы отредактировать файл конфигурации MySQL, потому что конфигурация будет возвращаться после каждого перезапуска...
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
и добавить
[mysqld]
sql-mode=""
затем перезагрузите
sudo systemctl restart mysql
Работает на Ubuntu 18.04.
Ответ 6
спасибо, это помогло мне, но это не установит его ПОСТОЯННО, и он будет возвращаться после каждого перезапуска.
Поэтому вы должны установить это в своем конфигурационном файле (например,/etc/mysql/my.cnf в разделе [mysqld]), чтобы изменения оставались в силе после перезапуска MySQL:
Файл конфигурации:/etc/mysql/my.cnf
[mysqld]
sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"