quand je me suis amélioré mon ubuntu du 15.10 au 16.04 j'ai cet erro dans mon projet 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
Le SQL en cours d'exécution était:
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
comment résoudre mon problème?
Dans votre sélection, vous avez une somme de fonctions agrégée et un ensemble de noms de colonnes. L'erreur vous indique que vous n'avez pas spécifié la liste correcte des noms de colonnes dans la clause group by. peut-être devriez-vous ajouter plus de colonnes name dans group par probablement lié à la table profile_details, opportunity_conditions
Vous avez également ,(opportunity.id),(opportunity_conditions.money),
(opportunity.mantaghe),
pourquoi le ()
si vous avez besoin de sum, vous devez ajouter sum à toutes les colonnes
sum(opportunity.id), sum(opportunity_conditions.money),
somme (opportunité.mantaghe),
sinon, si ce sont des colonnes normales, vous devriez utiliser le sintax normal without ()
opportunity.id, opportunity_conditions.money,opportunity.mantaghe,
J'ai essayé de réécrire une requête possible
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
avec group by sur le nom de colonne essentiel (j'espère)
GROUP BY`opportunity`.`id`, `profile_details`.`user_id`,`opportunity_conditions.money`,
Exécutez le:
Sudo mysql -u root -p
Et changez le mode SQL pour votre instance de serveur MySQL:
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Une autre façon serait d'utiliser les configurations de MySQL. Allez à /etc/mysql/my.cnf
:
[mysqld]
et juste en dessous ajoutez la déclaration sql_mode = ""
redémarrez le service mysql:
Sudo systemctl restart mysql
Dans laravel avec MySql, allez dans le fichier config/database.php et changez le tableau dans le mode MySql strict en 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,
],
],
Veuillez simplement copier cette ligne et l'exécuter. cela a fonctionné pour moi.
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
La solution est d'éditer le fichier de configuration MySQL car la configuration sera rétablie après chaque redémarrage ...
Sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
et ajouter
[mysqld]
sql-mode=""
puis redémarrer
Sudo systemctl restart mysql
Fonctionne sur Ubuntu 18.04.
Thx, cela m'a aidé, mais cela ne le réglera pasDE MANIÈRE PERMANENTE, et il reviendra après chaque redémarrage.
Vous devriez donc le définir dans votre fichier de configuration (par exemple, /etc/mysql/my.cnf dans la section [mysqld]), afin que les modifications restent en vigueur après un redémarrage de MySQL:
Fichier de configuration: /etc/mysql/my.cnf
[mysqld]
sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"