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

Comment afficher un champ dans la clause WHERE avec GROUP BY dans MySQL ?

Barbara Streisand
Libérer: 2024-11-07 06:13:03
original
565 Les gens l'ont consulté

How to Display a Field in the WHERE Clause with GROUP BY in MySQL?

Requête SQL avec clause WHERE pour un champ spécifique

Problème initial :

Dans MySQL, vous ne parvenez pas à afficher un les données du champ de la table de base de données dans la clause WHERE d'une requête lorsque d'autres champs non inclus dans la clause WHERE sont également présents dans la clause GROUP BY de la requête. Plus précisément :

<code class="sql">SELECT cursos.cursoID AS idcurso, cursos.estadoCurso,
cursosUsuarios.userHabilitado 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

Solution proposée :

Malheureusement, cette limitation ne peut pas être surmontée directement dans MySQL. Il existe cependant des stratégies alternatives pour obtenir le résultat souhaité :

Solution 1 : Sous-requête

Créez une sous-requête pour récupérer les données du champ souhaité :

<code class="sql">SELECT userID, userHabilitado
FROM cursosUsuarios
WHERE userID = 70</code>
Copier après la connexion

Ensuite, rejoignez cette sous-requête avec la requête principale en utilisant le(s) champ(s) approprié(s) :

<code class="sql">SELECT cursos.cursoID AS idcurso, cursos.estadoCurso,
(SELECT userHabilitado 
 FROM cursosUsuarios 
 WHERE userID = 70) AS 'userHabilitado',                              
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

Solution 2 : Requête imbriquée

Reformuler la requête à l'aide d'une requête imbriquée :

<code class="sql">SELECT idcurso, estadoCurso, 'userHabilitado'
FROM (
  SELECT cursoID AS idcurso, estadoCurso, userHabilitado
  FROM cursos LEFT JOIN cursosUsuarios
  ON cursos.cursoID = cursosUsuarios.cursoID
  WHERE cursos.estadoCurso='abierto'
  GROUP BY cursoID
) AS subquery
WHERE userHabilitado = 1;</code>
Copier après la connexion

Ces deux solutions vous permettent d'afficher les données du champ userHabilitado pour des utilisateurs spécifiques dans la clause WHERE tout en incluant d'autres champs dans la clause GROUP BY.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!