需要生成课程列表和计数
- 全部
- 未答复
- 已回答但未选中
问题。
这是我的查询
SELECT c.id,
c.name,
COUNT(allq.id) 'All',
COUNT(unanswered.id) 'Unanswered',
COUNT(unchecked.id) 'Unchecked'
FROM courses c
LEFT JOIN `courses-lessons` cl
ON c.id = cl.cid
LEFT JOIN lesson_questions allq
ON cl.id = allq.lid
LEFT JOIN
(
SELECT q.id, a.qid, q.lid
FROM lesson_questions q
LEFT JOIN
(
SELECT id, qid
FROM answers
WHERE id NOT IN (SELECT aid FROM answer_chk_results)
) a
ON q.id = a.qid
) unchecked
ON cl.id = unchecked.lid
LEFT JOIN
(
SELECT id
FROM lesson_questions
WHERE id NOT IN (SELECT qid FROM answers)
) unanswered
ON cl.id = unchecked.lid
GROUP BY c.id, c.name
这是一个SQL Fiddle
数据库结构
https://docs.google.com/open?id=0B9ExyO6ktYcOenZ1WlBwdlY2R3c
我添加了 3 个问题作为示例数据,但查询计算所有问题并返回 9。这是不可能的。出了点问题。想不通,我错过了什么。
更新
我将解释一些表格:
answer_chk_results
- 检查答案表。因此,如果此表上不存在某些答案,则表示未选中lesson_questions
- 课程 <-> 问题关联(按 id)表courses-lessons
- 课程 <-> 课程关联(按 id)表
只有第一个问题似乎并不难:当然,要计算所有问题的数量,我的计划如下所示:
首先,我们需要获取所有课程名称列表。查询将如下所示:
从课程 c 中选择 c.id、c.name
然后
courses-lessons
通过每个选定的课程从关联表中获取所有课程1.
(不知道如何继续之前的查询)然后,按所选课程 ID(列)计算所有问题
lid
2.