初始问题:
在 MySQL 中,您无法显示当查询的 GROUP BY 子句中也存在未包含在 WHERE 子句中的其他字段时,查询的 WHERE 子句中的数据库表字段的数据。具体来说:
<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>
建议的解决方案:
不幸的是,这个限制无法在 MySQL 中直接克服。但是,还有其他策略可以实现所需的结果:
创建子查询来检索所需的字段数据:
<code class="sql">SELECT userID, userHabilitado FROM cursosUsuarios WHERE userID = 70</code>
然后加入此子查询与使用适当字段的主查询:
<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>
使用嵌套查询重新制定查询:
<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>
这两种解决方案都允许您在 WHERE 子句中显示特定用户的 userHabilitado 字段数据,同时在 GROUP BY 子句中包含其他字段。
以上是如何在MySQL中使用GROUP BY显示WHERE子句中的字段?的详细内容。更多信息请关注PHP中文网其他相关文章!