조인쿼리에대해 질문드립니다.
본문
A table (qu)
code문제 코드 |
step (문제번호) |
qanswer(정답1)
|
a.qanswerTwo(정답2)
|
code 001 |
1 |
1 |
1 |
code 001 |
2 |
2 |
3 |
code002 |
1 |
2 |
0 |
code002 | 2 | 3 | 0 |
code003 | 1 | 1 | 0 |
code003 | 2 | 4 | 0 |
b table (an)
code(문제 코드) | user (사용자) | step(문제번호) | b.answer(답풀이) |
code 001 | aaa | 1 | 1 |
code 001 | aaa | 2 | 3 |
code002 | aaa | 1 | 1 |
code002 | aaa | 2 | 3 |
code003 | aaa | 1 | 1 |
code003 | aaa | 2 | 4 |
code002 | bbb | 1 | 2 |
code002 | bbb | 2 | 3 |
setp 2문제가 다맞어야 정답처리
qanswer, a.qanswerTwo 둘중에 1개 맞아도 정답
나와야될 결과
user |
cnt |
aaa |
2 |
bbb |
1 |
실제 작업한 쿼리
SELECT b.user,count(*) as cnt from qu a
LEFT JOIN an b
ON a.step=b.step and a.code = b.code
where a.qanswer=b.answer or a.qanswerTwo=b.answer
group by a.user
결과
user |
cnt |
aaa |
5 |
bbb |
3 |
위에 나와야 될 결과 나오게 할려면
쿼리를 어떻에 처리 해야 되나요?
조언 부탁합니다.
답변 1
답을 구해보기는 했는데
이 부분은 쿼리문으로만 처리 하는거 보다는
php 파일에서 처리 하는 편이 좋을 것 같네요..
쿼리가 더럽습니다...ㅠㅠ
SELECT
c.user, count(*) as cnt
FROM
an as c
JOIN
(
select
a.code,a.user
from
an as a
left join
qu as b
ON
a.code = b.code
AND
a.step = b.step
WHERE
a.step = 1
AND
(a.answer = b.qanswer or a.answer = b.qanswerTwo)
)
as d
ON
d.code = c.code
AND
c.user = d.user
WHERE
c.step = 2
AND
(
c.answer = (select qanswer from qu where code = d.code and step = 2)
OR
c.answer = (select qanswerTwo from qu where code = d.code and step = 2)
)
GROUP BY
c.user