MySQL查询(连接表)

时间:2011-01-17 22:22:40

标签: sql mysql

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等表示......替代品之后的数字是它得到的选择数量(答复)。

MultiQuestion1

Alt1 | 3

Alt2 | 2

Alt3 | 0

MultiQuestion2

Alt1 | 2

Alt2 | 3

FreeText1

正确答案为

ANSWER2

...

我可以通过查询向我提供所有问题以及属于它的所有替代方案,但是当我尝试计算每个问题替代方案的所有答案时,我失败了。

所以现在我可以使用SQL-ninja =)

的一些帮助

先谢谢Daniel

1 个答案:

答案 0 :(得分:0)

在我的头顶,这可能会有效:

SELECT alternatives.id, COUNT(DISTINCT(answers.id))
FROM alternatives
LEFT JOIN answers ON alternatives.id = answers.altid
GROUP BY alternatives.id;

应该为您提供answers表格中每个替代方案的总次数。