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 ?

17
demandé sur Isaac Bennetch 2016-04-30 07:46:31

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`,  
6
répondu scaisEdge 2016-04-30 06:50:49

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
42
répondu chitwarnold 2017-09-21 07:22:18

dans laravel avec MySql aller au fichier config / database.php et il changent dans le mode Tableau MySql strict à false.

enter image description here

5
répondu caicedo1089 2018-05-17 21:01:25

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',''));
3
répondu Humphrey 2018-03-30 09:40:20

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"
0
répondu alex 2017-08-31 14:51:50