首頁  >  文章  >  資料庫  >  如何在 MySQL 中使用條件 WHERE 子句顯示使用者特定課程的可用性?

如何在 MySQL 中使用條件 WHERE 子句顯示使用者特定課程的可用性?

Patricia Arquette
Patricia Arquette原創
2024-11-06 09:38:02394瀏覽

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