Отображение сводки результатов пользователя в MySQL

Я хочу показать результат пользователя летом. то есть вопросы, на которые он пытался ответить, и результат их ответа, а также те вопросы, которые он оставил без присмотра. У меня есть одна таблица, содержащая мастер вопроса, и одна таблица — мастер ответа. Я хочу, чтобы отобразить летопись пользователя. Ниже моя структура таблицы. В настоящее время я получаю только попытки ответить на вопросы и ответы на них по следующему запросу.

SELECT t1.exam_type,t1.questions,a1.answer,t1.correct_ans FROM tbl_que t1 LEFT JOIN tbl_ans a1 ON a1.que_id=t1.que_id WHERE t1.exam_type='1' AND a1.user_id='001' ORDER BY t1.que_id

Но я хочу беспрепятственные вопросы и для конкретного пользователя.

tbl_que
que_id  |exam_type  |exam_name  |questions |correct_ans
1       |1          |railway    |que1      |ansA
2       |1          |railway    |que2      |ansC
3       |2          |post       |que3      |ansC
4       |2          |post       |que4      |ansA
5       |1          |railway    |que5      |ansB


tbl_ans
ans_id  |exam_type |answer |user_id |que_id
1       |1         |right  |001     |1
2       |1         |wrong  |001     |2
3       |1         |right  |002     |3
4       |1         |right  |002     |4



Output/result
|exam_type |question |answer   |correct_ans
|1         |que1     |right    |ansA
|1         |que2     |wrong    |ansC
|1         |que5     |NULL     |ansB

1

Решение

Как насчет размещения критериев для user_id в предложении ON LEFT JOIN?

Тест по SQL Fiddle Вот

select
q.exam_type,
q.questions,
a.answer,
q.correct_ans
from tbl_que q
left join tbl_ans a on (a.que_id = q.que_id and a.user_id='001')
where q.exam_type = 1
order by q.que_id
1

Другие решения

Вам просто нужно изменить свой WHERE пункт:

WHERE t1.exam_type='1' AND (a1.user_id='001' OR a1.user_id IS NULL)

Это будет включать в результаты все вопросы из tbl_que, на которые нет ответов ни от одного пользователя (который, таким образом, включает пользователя 001).

Выход:

exam_type   questions   answer  correct_ans
1           que1        right   ansA
1           que2        wrong   ansC
1           que5        (null)  ansB

SQLFiddle

4

Попробуйте это с левым соединением:

select exam_type,questions,answer,correct_ans
from tbl_que a
left join tbl_ans b on a.que_id=b.que_id
where exam_type=1 AND (b.user_id='001' OR b.user_id IS NULL)
1

Вы также можете это исправить, добавив user_id условие в левом соединении само по себе.

Приведенный ниже запрос должен работать для вас.

SELECT
t1.exam_type, t1.questions, a1.answer, t1.correct_ans
FROM
tbl_que t1
LEFT JOIN  tbl_ans a1 ON a1.que_id = t1.que_id AND a1.user_id = '001'
WHERE
t1.exam_type = '1' ORDER BY t1.que_id
0
По вопросам рекламы [email protected]