QuestionsTable
id *(int)| question_text(string)| question_type(int)
AlternativesTable
id *(int)| question_id(int)| alternative_text(string)| is_correct(bool)
AnswersTable
id *(int)| question_id(int)| alternative_id(int)| answer_text(string)
“*”=主键
每个问题都可以是自由文本或多个选择器。多选择器问题有一个或多个替代方案,只有一个可以是正确的。
答案由question_id和alternative_id(多选择器)或answer_text(自由文本)定义。 is_correct bool是这样我可以标记哪个答案是正确答案。
如何创建一个SQL查询,它会为每个问题列出所有替代方案,并显示每个选项的计数,以显示有多少选择它?假设我可以将它存储在一个数组中并使用foreach循环遍历它并将其显示为下面的示例。
一个例子,每个问题都由它的question_text表示,并且每个替代该问题的替代方案都由Alt1(alternative_text),Alt2等表示......替代品之后的数字是它得到的选择数量(答复)。
Alt1 | 3
Alt2 | 2
Alt3 | 0
Alt1 | 2
Alt2 | 3
正确答案为
ANSWER2
...
我可以通过查询向我提供所有问题以及属于它的所有替代方案,但是当我尝试计算每个问题替代方案的所有答案时,我失败了。
所以现在我可以使用SQL-ninja =)
的一些帮助先谢谢Daniel
答案 0 :(得分:0)
在我的头顶,这可能会有效:
SELECT alternatives.id, COUNT(DISTINCT(answers.id))
FROM alternatives
LEFT JOIN answers ON alternatives.id = answers.altid
GROUP BY alternatives.id;
应该为您提供answers
表格中每个替代方案的总次数。