현재 코스 및 시험 모듈을 포함하는 전자 학습 플랫폼의 일종을 연구 중입니다. 아이디어는 코스가 시험에 이어지는 것입니다. 사용자는 시험 테이블의 설정에 따라 시험을 몇 번이나 풀 수 있습니다. 나는 사용자가 시험 또는 통계 페이지로 리디렉션되어야하는지 여부를 결정해야하는 모듈을 가지고 있습니다. 사용자가 모든 시도를 사용하지 않은 경우 시험으로 리디렉션되어야하며, 그렇지 않으면 통계로 리디렉션되어야합니다.중첩 된 서브 쿼리의 MySQL 변수
여기 내 쿼리가 있습니다 (약간 단순화되었습니다. 외부 쿼리의 모든 조건과 조인은 여기에서 중요하지 않으므로 간단합니다.) 어디로 가야할지 결정해야합니다.
SELECT
@course_id := courses.id as id,
IF(
(SELECT X.attempts_count FROM
(SELECT
COUNT(exams_attempts.id) as attempts_count,
@max_attempts := exams.max_attempts
FROM exams
LEFT JOIN exams_attempts ON exams.id = exams_attempts.quiz_id
JOIN users ON exams_attempts.user_id = users.id
WHERE exams_attempts.user_id = 12
AND exams_attempts.course_id = @course_id
HAVING attempts_count >= @max_attempts) as X
),
'stats',
'exam'
) as redirect
FROM courses
WHERE courses.id = 1
테스트를 위해 정적 인 값으로 제한된 코스가 있지만 실제 사용에서는 검색하는 데 많은 양의 코스가 있습니다.
마침내 - 나는 동일한 MySql 버전 임에도 불구하고 localhost에서는 작동하지만 서버에서는 작동하지 않음을 발견했습니다. 내 쿼리가 제대로 실행되지 못하게하는 몇 가지 설정이 있는지 알고 싶습니다. 또한 나는 당신이 무엇을 제안하는지 알고 싶습니다. 아마 제 아이디어가 좋지 않고 그 쿼리를 다시 만들 수 있습니까?
이 기사는 실제로 변수를 이해하고 내 문제를 해결하는 데 도움이되었습니다. 좀 더 진보 된 SQL을 사용하는 모든 사람들을 위해 추천합니다. – Rocket