在具有学生、课程和注册的多个表的 MySQL 数据库中,目标是显示学生可以注册的可用课程列表。要求是仅显示特定用户的 userHabilitado 字段,确保这些值与相应的课程正确关联。但是,当前查询返回不正确的 userHabilitado 值。
在 MySQL 5.7 之前,默认行为允许非 FULL group by 查询,其中一些非聚合(NON AGGS) ) 列可以包含在 group by 子句之外。但是,在 MySQL 5.7 及更高版本中,默认情况下启用 ONLY_FULL_GROUP_BY 设置。这要求所有 NON AGGS 都成为 group by 子句的一部分,否则会发生错误。
在给定的查询中,userHabilitado 字段包含在 group by 中,但 WHERE 子句根据整个cursos 表而不是特定用户。为了纠正这个问题,MySQL 不允许在 group by 字段中使用条件 WHERE 子句。
要解决此限制,建议使用子查询基于以下条件过滤 cursos 表:特定用户,然后将结果与主查询连接起来。这可确保仅针对所选用户评估 userHabilitado 字段:
<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>
在子查询中,将筛选 cursosUsuarios 表以检索特定用户的 userHabilitado 值(在本例中为 70)以及匹配cursoID。然后将该值与主查询连接,确保正确的 userHabilitado 字段与相应的课程关联。
以上是如何在 MySQL 中使用条件 WHERE 子句显示用户特定课程的可用性?的详细内容。更多信息请关注PHP中文网其他相关文章!