在具有學生、課程和註冊的多個表的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中文網其他相關文章!