在MySQL中显示用户的结果摘要

时间:2018-08-14 07:28:17

标签: php mysql sql isqlquery

我想向用户展示结果。即他尝试的问题,回答的结果以及他无人看管的那些问题。我有一张表包含问题母版,一张表是答案母版。我想显示用户的总结。下面是我的表结构。目前,我只能通过以下查询获得尝试的问题及其答案

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

4 个答案:

答案 0 :(得分:4)

您只需要更改您的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

答案 1 :(得分:1)

尝试使用左联接:

arg

答案 2 :(得分:1)

如何将user_id的条件放在LEFT JOIN的ON子句中?

在SQL Fiddle here上进行测试

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

答案 3 :(得分:0)

您还可以通过在左联接本身中添加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