Requêtes agrégées sans GROUP BY : compréhension des erreurs et des résolutions
Auparavant, sur les anciennes versions de MySQL, les requêtes sans clause GROUP BY pour les requêtes agrégées les fonctions (par exemple, COUNT()) fonctionnaient souvent sans problème. Cependant, avec MySQL 5.7.14 et versions ultérieures, de telles requêtes peuvent rencontrer une erreur :
SQLSTATE[42000]: Syntax error or access violation: 1140 In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column [...]
Cette erreur provient d'un changement dans le comportement par défaut de MySQL pour s'aligner sur d'autres systèmes SGBDR, qui nécessitent les champs non agrégés. dans la clause SELECT à inclure dans la clause GROUP BY lors de l'utilisation de fonctions agrégées.
Résoudre l'erreur :
Pour résoudre cette erreur, vous avez deux options :
1. Ajuster les paramètres MySQL :
Vous pouvez revenir au comportement hérité en modifiant les paramètres de MySQL. Cependant, cela n'est généralement pas recommandé car cela perpétue des pratiques de requête non optimales.
2. Corriger la requête :
La solution préférée consiste à modifier la requête pour inclure des colonnes non agrégées dans la clause GROUP BY. Par exemple, la requête ci-dessus peut être réécrite comme :
SELECT id, password, COUNT(id) AS count FROM users WHERE email = :email GROUP BY id, password LIMIT 1
Exception dans 5.7.5 :
Dans les versions MySQL 5.7.5 et ultérieures, c'est toujours Il est permis d'exclure les colonnes non agrégées de la clause GROUP BY lorsque la colonne non agrégée a été contrainte à une valeur unique (par exemple, en utilisant un filtre dans la clause WHERE). Des détails et des exemples de cette exception peuvent être trouvés ici.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!