首页  >  文章  >  数据库  >  如何在 MySQL 中使用条件 WHERE 子句显示用户特定课程的可用性?

如何在 MySQL 中使用条件 WHERE 子句显示用户特定课程的可用性?

Patricia Arquette
Patricia Arquette原创
2024-11-06 09:38:02392浏览

How to Display User-Specific Course Availability with Conditional WHERE Clauses in MySQL?

在 MySQL 中对特定字段使用条件 WHERE 子句

问题描述

在具有学生、课程和注册的多个表的 MySQL 数据库中,目标是显示学生可以注册的可用课程列表。要求是仅显示特定用户的 userHabilitado 字段,确保这些值与相应的课程正确关联。但是,当前查询返回不正确的 userHabilitado 值。

MySQL 限制和解决方案

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn