Dans une base de données MySQL avec plusieurs tables pour les étudiants, les cours et les inscriptions, le but est d'afficher une liste des cours disponibles auxquels les étudiants peuvent s'inscrire. L'exigence est d'afficher le champ userHabilitado uniquement pour un utilisateur spécifique, en garantissant que les valeurs sont correctement associées aux cours correspondants. Cependant, la requête actuelle renvoie des valeurs userHabilitado incorrectes.
Avant MySQL 5.7, le comportement par défaut autorisait les requêtes non-FULL group by, où certaines non agrégées (NON AGGS ) les colonnes pourraient être incluses en dehors de la clause group by. Cependant, dans MySQL 5.7 et versions ultérieures, le paramètre ONLY_FULL_GROUP_BY est activé par défaut. Cela nécessite que tous les NON AGGS fassent partie de la clause group by, sinon une erreur se produira.
Dans la requête donnée, le champ userHabilitado est inclus dans le group by, mais la clause WHERE filtre en fonction de l'ensemble table cursos au lieu d'un utilisateur spécifique. Pour remédier à cela, MySQL n'autorise pas les clauses WHERE conditionnelles dans les champs group by.
Pour résoudre cette limitation, il est recommandé d'utiliser une sous-requête pour filtrer la table cursos en fonction de l'utilisateur spécifique, puis joignez le résultat à la requête principale. Cela garantit que le champ userHabilitado est évalué uniquement pour l'utilisateur sélectionné :
<code class="sql">SELECT cursos.cursoID AS idcurso, cursos.estadoCurso, ( SELECT userHabilitado FROM cursosUsuarios WHERE cursosUsuarios.userID = 70 AND cursosUsuarios.cursoID = cursos.cursoID ) AS 'ok', GROUP_CONCAT(cursosUsuarios.userID SEPARATOR ',') AS 'usuarios' 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>
Dans la sous-requête, la table cursosUsuarios est filtrée pour récupérer la valeur userHabilitado pour l'utilisateur spécifique (dans ce cas, 70) et le CursoID correspondant. Cette valeur est ensuite jointe à la requête principale, garantissant que le champ userHabilitado correct est associé au cours correspondant.
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!