only_full_group_by
Erreur dans MySQL 5.7
MySQL version 5.7 a introduit le mode only_full_group_by
, qui exige que toutes les colonnes qui ne sont pas agrégées dans l'instruction SELECT
soient incluses dans l'instruction GROUP BY
. Cette erreur se produit lorsque l'instruction SELECT
de la requête contient des colonnes non agrégées qui n'apparaissent pas dans l'instruction GROUP BY
.
Il existe deux manières de résoudre ce problème :
Méthode 1 : Ajouter les colonnes manquantes à GROUP BY
Ajoutez la colonne manquante mod_users_groups.group_id
à l'instruction 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_name, g.group_id HAVING COUNT(d.user_id) > 0 ORDER BY g.group_name</code>
Cela garantit que toutes les colonnes qui ne sont pas agrégées dans l'instruction SELECT
sont incluses dans l'instruction GROUP BY
, éliminant ainsi l'erreur.
Méthode 2 : Utiliser la fonction d'agrégation
Alternativement, si la colonne manquante n'est pas pertinente pour le regroupement, vous pouvez utiliser une fonction d'agrégation pour résumer les données avant de la sélectionner. Par exemple, si group_name
est effectivement unique, vous pouvez remplacer mod_users_groups.group_id
par la fonction d'agrégation suivante :
<code class="language-sql">MIN(mod_users_groups.group_id)</code>
Cela renverra le plus petit group_name
pour chaque group_id
unique, garantissant que l'instruction SELECT
ne contient que des colonnes agrégées.
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!