Maison > base de données > tutoriel mysql > le corps du texte

Comment afficher la disponibilité des cours spécifiques à l'utilisateur avec des clauses WHERE conditionnelles dans MySQL ?

Patricia Arquette
Libérer: 2024-11-06 09:38:02
original
453 Les gens l'ont consulté

How to Display User-Specific Course Availability with Conditional WHERE Clauses in MySQL?

Utilisation de clauses WHERE conditionnelles pour des champs spécifiques dans MySQL

Description du problème

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.

Limites et solutions MySQL

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.

Solution proposée

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal