MySQL 中 WHERE 子句可以限制为特定字段吗?
MySQL 中,WHERE 子句根据指定条件过滤行。但是,不可能将 WHERE 子句的应用限制到查询中的特定字段。
理解问题
在问题的上下文中,目标是显示可用课程的列表以及关联用户的注册状态。每行代表一门课程并显示特定用户的注册状态 (userHabilitado)。但是,必须从 URL 中获取用户的 userID,并用于过滤该特定用户的结果。
解决方案:利用非完整分组依据
之前MySQL 5.7 开始,MySQL 允许非完整分组依据,这意味着像 group_concat 这样的聚合函数可以与非聚合列(NON AGGS)一起使用。但是,从 MySQL 5.7 开始,默认情况下启用 ONLY_FULL_GROUP_BY 设置,不允许此类查询。
在这种情况下,查询尝试将 userHabilitado 添加到正在显示的列列表中,这些列已按 Cursos 分组.cursoID。但是,显示的 userHabilitado 值不会被 WHERE 子句过滤,因此显示为该用户找到的第一个值,无论课程如何。
解决方法:禁用非完整分组依据
一种解决方法是使用 SQL_CALC_FOUND_ROWS 修饰符禁用特定查询的 ONLY_FULL_GROUP_BY:
<code class="sql">SET SQL_CALC_FOUND_ROWS = 0;</code>
但是,不建议这样做,因为它可能会导致结果中潜在的差异,并且应该与小心。
以上是我可以将 WHERE 子句限制为 MySQL 中的特定字段吗?的详细内容。更多信息请关注PHP中文网其他相关文章!