SQLSTATE[42000]: syntaxe error or access violation: 1055 Expression #3 of SELECT list is not in GROUP BY clause and contains nonagregated
quand j'ai été mis à niveau mon ubuntu de 15.10 à 16.04 j'ai cette 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 a été:
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 ?
5 réponses
dans vous sélectionnez vous avez une somme de fonction agrégée et un jeu de nom de colonne, l'erreur vous indique que vous n'avez pas spécifié la liste correcte de nom de colonne dans le groupe par clause . peut - être devriez-vous ajouter plus de noms de colonnes dans le groupe par probablement lié au profile_details, opportunity_conditions
table
Vous avez aussi ,(opportunity.id),(opportunity_conditions.money),
(opportunity.mantaghe),
pourquoi ()
si vous avez besoin de la somme, vous devez ajouter la somme à toutes les colonnes
sum(opportunity.id), sum(opportunity_conditions.money),
somme (opportunité.mantaghe),
sinon si ce sont des colonnes normales vous devrait utiliser la sintax normale sans ()
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 l'essentiel de la colonne nom (je l'espère)
GROUP BY`opportunity`.`id`, `profile_details`.`user_id`,`opportunity_conditions.money`,
OU tout Simplement Courir
$ sudo mysql-u root-p
modifier le Mode SQL pour L'Instance de votre serveur MySQL
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
une autre façon serait d'utiliser les configs mysql
allez à/etc / mysql / my.cnf
- ajouter une section pour [mysqld] et juste en dessous, il ajoute la déclaration sql_mode =""
- redémarrez le service mysql $ sudo systemctl restart mysql
dans laravel avec MySql aller au fichier config / database.php et il changent dans le mode Tableau MySql strict à false.
s'il vous Plaît copiez cette ligne et de l'exécuter. il a travaillé pour moi.
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Thx, cela a contribué à moi, mais ce ne sera pas le définir de façon permanente, et il va revenir après chaque redémarrage.
vous devez donc le définir dans votre fichier de configuration (par exemple /etc/mysql/my.cnf dans la section [mysqld]), de sorte que les modifications restent en vigueur après un redémarrage MySQL:
fichier de configuration:/etc/mysql / my.cnf
[mysqld]
sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"