ホームページ  >  記事  >  データベース  >  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 句の外側に含めることができます。ただし、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 テーブルがフィルター処理されて、特定のユーザー (この場合は 70) の userHabilitado 値が取得され、一致するcursoID。次に、この値はメイン クエリと結合され、正しい userHabilitado フィールドが対応するコースに関連付けられるようになります。

以上がMySQL で条件付き WHERE 句を使用してユーザー固有のコースの利用可能状況を表示するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。