我的数据库结构如下所示:
https://docs.google.com/open?id=0B9ExyO6ktYcOenZ1WlBwdlY2R3c
对一些表格的解释:
answer_chk_results -检查答案表.所以如果这个表上不存在某些答案,那就意味着它没有被检查lesson_questions -课程<->问题关联(按id)表当我像这样查询数据库时:
SELECT
q.id,
q.content,
q.type
FROM
`questions_and_exercises` q,
`lesson_questions` lq
WHERE
q.id = lq.qid
AND lq.lid = 1我收到了所有的问题清单。但我想要的是每一个问题的答案和核对答案。当我使用这个查询时:
SELECT
q.id,
q.content,
q.type,
COUNT(DISTINCT a.ID) answer_count,
COUNT(DISTINCT acr.id) checked_count
FROM
`questions_and_exercises` q,
`lesson_questions` lq
LEFT JOIN answers a ON a.qid = lq.qid,
LEFT JOIN `answer_chk_results` acr ON acr.aid = a.id
WHERE
q.id = lq.qid
AND lq.lid = 1结果只是一个问题和错误的答案数。(我的数据库里大约有9-10个问题)我漏掉了什么?
发布于 2012-09-01 11:15:21
一个group by会有帮助,比如:
select q.id
, q.content
, q.type
, count(distinct a.id) as answer_count
, count(acr.checked) as checked_count
from questions_and_exercises q
join lesson_questions lq
on q.id = lq.id
left join
answers a
on a.qid = lq.qid
left join
answer_chk_results acr
on acr.aid = a.id
group by
q.id
, q.content
, q.type注意,count(acr.checked)返回answer_chk_results表中有一行的答案数。count(distinct acr.checked)返回检查列的不同值的数目。如果选中为布尔值,则始终为1或0。
https://stackoverflow.com/questions/12227216
复制相似问题