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:

  • добавьте раздел для [mysqld] и прямо под ним добавьте оператор sql_mode = ""
  • перезапустите службу mysql:

    sudo systemctl restart mysql
    

Ответ 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"