Maison > Article > base de données > Comment appliquer une clause WHERE à un champ spécifique dans MySQL lors de l'utilisation de GROUP BY ?
Lors de la création d'une requête qui inclut une clause WHERE, il est possible de restreindre la condition à un champ spécifique champ. Dans votre cas, vous essayez d'afficher le champ userHabilitado pour chaque cours, filtré par un utilisateur spécifique. Cependant, la requête fournie n'inclut pas la clause WHERE souhaitée.
Avant MySQL 5.7, un paramètre appelé ONLY_FULL_GROUP_BY était désactivé par défaut. Cela permettait de combiner une clause group by avec des colonnes non agrégées (NON AGGS) qui ne faisaient pas partie du group by. Par conséquent, la requête peut renvoyer des données incorrectes ou ambiguës.
Dans MySQL 5.7 et versions ultérieures, ONLY_FULL_GROUP_BY est activé par défaut. Cela nécessite que tous les NON AGGS soient inclus dans la clause group by, évitant ainsi les inexactitudes des données.
Considérez l'exemple de requête suivant :
<code class="sql">SELECT cursos.cursoID AS idcurso, cursos.estadoCurso, GROUP_CONCAT(cursosUsuarios.userID SEPARATOR ',') AS usuarios, MAX(IF(usuarios.userID = 70, cursosUsuarios.userHabilitado, NULL)) AS userHabilitado FROM cursos LEFT JOIN cursosUsuarios ON cursos.cursoID = cursosUsuarios.cursoID LEFT JOIN usuarios ON cursosUsuarios.userID = usuarios.userID WHERE cursos.estadoCurso = 'abierto' GROUP BY cursos.cursoID;</code>
Cette requête utilise le Fonction MAX(IF()) pour conditionner l'agrégation du champ userHabilitado. Il vérifie si usuarios.userID correspond à l'ID utilisateur fourni (70) et renvoie la valeur userHabilitado correspondante, sinon il renvoie NULL. En incluant MAX() dans la clause GROUP BY, nous sommes en mesure de conserver le résultat agrégé conditionnel pour chaque cursoID.
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!