Les clauses WHERE peuvent-elles être limitées à un champ spécifique dans MySQL ?
Dans MySQL, la clause WHERE filtre les lignes en fonction de conditions spécifiées. Cependant, il n'est pas possible de limiter l'application d'une clause WHERE à un champ spécifique au sein d'une requête.
Comprendre le problème
Dans le contexte de la question, le L'objectif est d'afficher une liste des cours disponibles et le statut d'inscription de l'utilisateur associé. Chaque ligne représente un cours et affiche le statut d'inscription (userHabilitado) pour un utilisateur particulier. Cependant, l'ID utilisateur de l'utilisateur doit être extrait de l'URL et utilisé pour filtrer les résultats pour cet utilisateur spécifique.
Solution : exploiter le groupe non complet par
Avant MySQL 5.7, MySQL autorisait le regroupement non complet, ce qui signifiait que les fonctions d'agrégation telles que group_concat pouvaient être utilisées avec des colonnes non agrégées (NON AGGS). Cependant, à partir de MySQL 5.7, le paramètre ONLY_FULL_GROUP_BY est activé par défaut, interdisant de telles requêtes.
Dans ce cas, la requête tente d'ajouter userHabilitado à la liste des colonnes affichées, qui sont déjà regroupées par cursos. .cursoID. Cependant, la valeur userHabilitado affichée n'est pas filtrée par une clause WHERE et affiche donc la première valeur trouvée pour cet utilisateur, quel que soit le cours.
Solution de contournement : désactivation du groupe non complet par
Une solution de contournement consiste à désactiver ONLY_FULL_GROUP_BY pour la requête spécifique en utilisant le modificateur SQL_CALC_FOUND_ROWS :
<code class="sql">SET SQL_CALC_FOUND_ROWS = 0;</code>
Cependant, cela n'est pas recommandé car cela peut introduire des écarts potentiels dans les résultats et doit être utilisé avec prudence.
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!