Mysql 5.7's only_full_group_by
Mode: dépannage et solutions
La mise à niveau vers MySQL 5.7 introduit souvent l'erreur only_full_group_by
. Cela se produit lorsqu'une instruction SELECT
comprend des colonnes non agrégées non incluses dans la clause GROUP BY
. Au lieu de désactiver cette caractéristique cruciale (qui est fortement découragée), explorons des solutions efficaces:
Le problème:
Les requêtes qui fonctionnaient correctement dans les versions MySQL plus anciennes pourraient échouer en 5.7, la production d'une erreur indiquant des colonnes non agglées dans la liste SELECT
ne dépend pas fonctionnellement des colonnes GROUP BY
.
Solutions recommandées:
Inclure des colonnes non agrégées dans GROUP BY
: La solution la plus simple est souvent d'ajouter toutes les colonnes non aggrées de la liste SELECT
à la clause GROUP BY
. Cela garantit que chaque groupe définit de manière unique les valeurs de ces colonnes. Par exemple:
<code class="language-sql">GROUP BY group_name, group_id</code>
Utilisez des fonctions agrégées: Si vous avez besoin de colonnes non agrégées dans vos résultats mais nécessitez toujours le regroupement, utilisez des fonctions agrégées (comme MIN()
, MAX()
, AVG()
, SUM()
, COUNT()
,
<code class="language-sql">SELECT group_id AS 'value', group_name AS 'text', COUNT(*) AS 'count' FROM mod_users_groups LEFT JOIN mod_users_data ON group_id = mod_users_data.group_id WHERE ... GROUP BY group_name, group_id</code>
Calonne des colonnes explicitement:
<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 ... GROUP BY g.group_name, g.group_id HAVING COUNT(d.user_id) > 0 ORDER BY g.group_name</code>
only_full_group_by
only_full_group_by
En mettant en œuvre ces stratégies, vous pouvez résoudre l'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!