Dépannage et résolution des erreurs MySQL "only_full_group_by"
MySQL version 5.7 a introduit le mode SQL "only_full_group_by", ce qui a amené certaines instructions de requête qui s'exécutaient auparavant normalement à signaler des erreurs. Cette erreur se produit lorsque la liste SELECT contient des colonnes non agrégées qui ne sont pas répertoriées dans la clause GROUP BY et n'ont pas de dépendance fonctionnelle sur les colonnes de la clause GROUP BY.
La solution est d'ajouter la colonne group_id
à la clause GROUP BY afin que l'instruction de requête soit conforme au mode "only_full_group_by". Cela garantit qu'il n'y a qu'une seule ligne de résultats pour chaque combinaison différente de group_id
et group_name
.
La meilleure pratique consiste à qualifier toutes les colonnes avec des noms de table ou des alias, en particulier lorsque vous travaillez avec plusieurs tables. Cela permet d'éviter toute ambiguïté et garantit que les données requises sont sélectionnées.
Ce qui suit est l'instruction de requête modifiée, qui peut être exécutée normalement en mode "only_full_group_by":
<code class="language-sql">SELECT g.group_id AS 'value', g.group_name AS 'text' FROM mod_users_groups g LEFT JOIN mod_users_data d ON g.group_id = d.group_id WHERE g.active = 1 AND g.department_id = 1 AND g.manage_work_orders = 1 AND g.group_name != 'root' AND g.group_name != 'superuser' GROUP BY g.group_id, g.group_name HAVING COUNT(d.user_id) > 0 ORDER BY g.group_name</code>
Il n'est pas recommandé de désactiver le mode "only_full_group_by" car cela permet de garantir l'intégrité et l'exactitude des données. En forçant l'inclusion de colonnes non agrégées dans la clause GROUP BY, MySQL peut garantir que les résultats sont précis et reflètent les données groupées attendues.
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!