학생, 강좌, 등록에 대한 여러 테이블이 있는 MySQL 데이터베이스에서, 목표는 학생들이 등록할 수 있는 이용 가능한 강좌 목록을 표시하는 것입니다. 요구 사항은 특정 사용자에 대해서만 userHabilitado 필드를 표시하여 값이 해당 코스와 올바르게 연결되도록 하는 것입니다. 그러나 현재 쿼리는 잘못된 userHabilitado 값을 반환합니다.
MySQL 5.7 이전에는 쿼리별로 비FULL 그룹이 허용되는 기본 동작이 있었지만 일부 비집계(NON AGGS ) 열은 group by 절 외부에 포함될 수 있습니다. 그러나 MySQL 5.7 이상에서는 ONLY_FULL_GROUP_BY 설정이 기본적으로 활성화되어 있습니다. 이를 위해서는 모든 NON AGGS가 group by 절의 일부여야 합니다. 그렇지 않으면 오류가 발생합니다.
주어진 쿼리에서 userHabilitado 필드는 group by에 포함되지만 WHERE 절은 전체를 기준으로 필터링합니다. 특정 사용자 대신 cursos 테이블. 이 문제를 해결하기 위해 MySQL은 필드별 그룹 내에서 조건부 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!