Maison  >  Article  >  base de données  >  Comment afficher un champ dans la clause WHERE avec GROUP BY dans MySQL ?

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

Barbara Streisand
Barbara Streisandoriginal
2024-11-07 06:13:03570parcourir

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>

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>

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>

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>

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!

Déclaration:
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