Я хочу показать результат пользователя летом. то есть вопросы, на которые он пытался ответить, и результат их ответа, а также те вопросы, которые он оставил без присмотра. У меня есть одна таблица, содержащая мастер вопроса, и одна таблица — мастер ответа. Я хочу, чтобы отобразить летопись пользователя. Ниже моя структура таблицы. В настоящее время я получаю только попытки ответить на вопросы и ответы на них по следующему запросу.
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
Как насчет размещения критериев для 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
Вам просто нужно изменить свой 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
Попробуйте это с левым соединением:
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)
Вы также можете это исправить, добавив 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