Lors de l'exécution d'une requête MySQL qui combine un SELECT COUNT et un SELECT avec GROUP BY, c'est Il est possible de rencontrer un écart dans le nombre de résultats. La raison derrière cela est souvent le fameux message d'erreur "'field_name' n'est pas dans GROUP BY".
Pour comprendre l'erreur, décomposons le problème :
GROUP BY regroupe les lignes en fonction des valeurs d'une ou plusieurs colonnes spécifiées. Dans notre cas, la requête avec GROUP BY comporte des clauses comme le nom GROUP BY. Cela signifie que seules les lignes avec des valeurs de nom uniques seront regroupées.
SQL92 exigeait à l'origine que toutes les colonnes de la clause SELECT soient également dans la clause GROUP BY. Cependant, SQL99 a assoupli cette restriction, permettant aux colonnes fonctionnellement dépendantes des colonnes GROUP BY d'être incluses dans la clause SELECT.
MySQL, par défaut, autorise le "regroupement partiel par", ce qui signifie qu'il autorise les colonnes dans le Clause SELECT qui ne figure pas explicitement dans la clause GROUP BY. Cependant, cela peut conduire à des résultats non déterministes.
Pour résoudre le problème, assurez-vous que toutes les colonnes de la clause SELECT font partie de la clause GROUP BY ou dépendent fonctionnellement de il. Dans notre exemple, le type, la langue et le code doivent être ajoutés à la clause GROUP BY :
SELECT `name`, `type`, `language`, `code` FROM `users` WHERE `verified` = '1' GROUP BY `name`, `type`, `language`, `code` ORDER BY `count` DESC LIMIT 0, 25
MySQL propose également un paramètre, @ @sql_mode, qui peut être configuré pour appliquer un groupe complet par :
set @@sql_mode='ONLY_FULL_GROUP_BY';
Avec ce paramètre, toute requête qui n'a pas de groupe complet par entraînera un erreur.
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!