需要生成课程列表和计数
- 全部
- 未答复
- 已回答但未选中
问题。
我的数据库结构看起来像这样
https://docs.google.com/open?id=0B9ExyO6ktYcOenZ1WlBwdlY2R3c
一些表的解释:
answer_chk_results
- 检查答案表。因此,如果此表上不存在某些答案,则表示未选中lesson_questions
- 课程 <-> 问题关联(按 id)表courses-lessons
- 课程 <-> 课程关联(按 id)表
执行
SELECT
c.ID,
c. NAME,
COUNT(lq.id) AS Questions,
COUNT(
CASE
WHEN a.id IS NULL THEN
lq.id
END
) AS UnAnswered,
COUNT(
CASE
WHEN cr.id IS NULL THEN
lq.id
END
) AS UnChecked
FROM
courses c
LEFT JOIN `courses-lessons` cl ON cl.cid = c.id
LEFT JOIN `lesson_questions` lq ON lq.lid = cl.lid
LEFT JOIN answers a ON a.qid = lq.qid
LEFT JOIN answer_chk_results cr ON cr.aid = a.id
GROUP BY
c.ID
首先在SQL fiddle上使用示例数据对其进行了测试。(真实数据很大,所以我不能把它放在 sqlfiddle 上)它返回了一些值。思想运作良好。但是当我用真实数据测试它时,看到它返回了错误的值。外汇,当我手动计数时,结果all questions count
必须是 25,但它返回 27。也许我做错了什么。
注意MySQL 服务器在我的本地机器上运行,所以如果你想远程连接到我的桌面并使用真实数据测试查询,我可以给你teamviewer id 和密码。