需要生成课程列表并计算
问题。
为了获得这个结果,我需要使用7个表来操作。
数据库结构
https://docs.google.com/open?id=0B9ExyO6ktYcOenZ1WlBwdlY2R3c
For full-sized image click here
我会解释其中一些:
answer_chk_results
- 已检查答案表。因此,如果此表中不存在某些答案,则表示未经检查lesson_questions
- 课程< - >问题关联(通过id)表courses-lessons
- 课程< - >课程协会(由id)表只有第一个问题似乎并不那么困难:为了解决所有问题,我的计划如下:
首先,我们需要获取所有课程名单。查询将如下所示:
SELECT c.id,c.name FROM courses c
然后从courses-lessons
的每个选定课程中获取1.
关联表的所有课程(不知道如何继续之前的查询)
然后,根据lid
2.
列)计算所有问题
醇>
但是我无法弄清楚最终的SQL语句对于所有3个问题的看法。
有什么建议吗?询问是否有不清楚的事情。
答案 0 :(得分:2)
未回答的问题:已回答的问题是答案表中没有答案的任何问题:
SELECT *
FROM questions
WHERE id NOT IN (SELECT qid FROM answers)
已回答但未经检查的问题:
SELECT *
FROM questions q
INNER JOIN
(
SELECT *
FROM answers
WHERE id NOT IN answer_chk_results -- unchecked answer
) a ON q.id = a.qid -- only answered questions
编辑:要获取未答复,未选中的所有问题的课程列表,请在一个查询中计算:
SELECT c.id, c.name, COUNT(all.id) 'All',
COUNT(unanswered.id) 'Unanswered',
COUNT(unchecked.id) 'Unchecked'
FROM courses c
INNER JOIN courses-lessons cl ON c.id = cl.cid
INNER JOIN questions all ON cl.id = all.lid
INNER JOIN
(
SELECT *
FROM questions
WHERE id NOT IN (SELECT qid FROM answers)
) unanswered ON cl.id = unchecked.lid
INNER JOIN
(
SELECT *
FROM questions q
INNER JOIN
(
SELECT *
FROM answers
WHERE id NOT IN (SELECT aid FROM answer_chk_results)
) a ON q.id = a.qid
) unchecked ON cl.id = unchecked.lid
GROUP BY c.id, c.name