>  기사  >  데이터 베이스  >  MySQL에서 조건부 WHERE 절을 사용하여 사용자별 강좌 가용성을 표시하는 방법은 무엇입니까?

MySQL에서 조건부 WHERE 절을 사용하여 사용자별 강좌 가용성을 표시하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-06 09:38:02391검색

How to Display User-Specific Course Availability with Conditional WHERE Clauses in MySQL?

MySQL의 특정 필드에 조건부 WHERE 절 사용

문제 설명

학생, 강좌, 등록에 대한 여러 테이블이 있는 MySQL 데이터베이스에서, 목표는 학생들이 등록할 수 있는 이용 가능한 강좌 목록을 표시하는 것입니다. 요구 사항은 특정 사용자에 대해서만 userHabilitado 필드를 표시하여 값이 해당 코스와 올바르게 연결되도록 하는 것입니다. 그러나 현재 쿼리는 잘못된 userHabilitado 값을 반환합니다.

MySQL 제한 사항 및 솔루션

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.