学生、コース、登録用の複数のテーブルを持つ MySQL データベースで、目的は、学生が登録できる利用可能なコースのリストを表示することです。要件は、特定のユーザーに対してのみ userHabilitado フィールドを表示し、値が対応するコースに正しく関連付けられていることを確認することです。ただし、現在のクエリは不正な userHabilitado 値を返します。
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 サイトの他の関連記事を参照してください。