【发布时间】:2012-05-09 14:59:50
【问题描述】:
我需要一些帮助来从多个表中获取数据。
这是我的桌子:
_______________ ______________ ___________ _______________ _____________
|_tblUsers____| |_tblAnswers__| |_tblAlt__| |_tblQuestion_| |_survey_____|
| userID | | answerAltID | | altID | | questID | | surveyID |
| username | | userID | | altText | | questText | | surveyName |
|_____________| |_____________| |_questID_| |_surveyID____| |____________|
TblUsers 拥有系统中的用户列表,tblAnswers 拥有用户给出的所有答案,tlbAlt 拥有问题的备选方案,tblQuestion 拥有问题。还有一个名为 tblSurveys 的表,但这里不需要,因为 tblQuestion 中提到了 ID。
这是我目前所拥有的:
SELECT
tblQuestion.questText,
tblAlt.altText,
Count(tblAnswers.answerID) as answers_count,
(SELECT COUNT(answerID) FROM tblAnswers, tblAlt
WHERE tblAnswers.answerAltID = tblAlt.altID
AND tblAlt.questID = " & CInt(questionID) & ") as total_count
FROM tblAlt, tblQuestion
LEFT JOIN tblAnswers ON (tblAlt.altId = tblAnswers.altID)
WHERE tblAlt.questID = " & CInt(questionID) & "
GROUP BY tblAlt.altText;
这会返回这样的行:
|什么是布拉布拉布拉? |答案是... | 2 (已回答) | 10(总 答案)|
不幸的是,这只会返回一个问题的所有行。有没有办法获取属于同一调查的所有行(基于surveyID)?
如果希望输出是这样的:
|什么是布拉布拉布拉? |答案是... | 2 (已回答) | 10(总 答案)|调查名称 |
我想返回所有备选方案(包括回答的数量、答案总数、相关问题和调查)。
更新:
这是我的输入:
SELECT tblalternativ.altTekst, tblalternativ.altID, Count(tblsvar.svarAltID) as antSvar,
(SELECT COUNT(*) FROM tblsvar, tblalternativ
WHERE tblsvar.svarAltID = tblalternativ.altID
AND tblalternativ.altSpmID = " & CInt(lblQuestion.Tag) & ") as antTotal,
(SELECT Count(*) FROM tblalternativ WHERE altSpmID = " & CInt(lblQuestion.Tag) & ") as spmTotal
FROM(tblalternativ) LEFT JOIN tblsvar ON (tblalternativ.altId = tblsvar.svarAltID)
WHERE(tblalternativ.altSpmID = " & CInt(lblQuestion.Tag) & ")
GROUP BY tblalternativ.altTekst ORDER BY tblalternativ.altID ASC
我的输出:
altTekst altID antSvar antTotal spmTotal
Black 83 1 3 5
Green 84 1 3 5
Yellow 85 1 3 5
White 86 0 3 5
Pink 87 0 3 5
但这仅显示一个问题的统计信息。我想在一项调查中显示所有问题。因此,我需要为该调查、问题名称和调查 ID 获取所有 altTekst。
我想要:
spmTekst altTekst altID antSvar antTotal spmTotal evalID
What is... Black 83 1 3 5 1
What is... Green 84 1 3 5 1
What is... Yellow 85 1 3 5 1
What is... White 86 0 3 5 1
What is... Pink 87 0 3 5 1
Who is.... The king 88 2 3 3 1
Who is.... The pope 89 0 3 3 1
Who is.... The president 90 1 3 3 1
Which.... Shoe 91 2 3 2 1
Which.... Hat 92 1 3 2 1
换句话说,我想要来自同一调查中所有问题的统计数据(基于 evalID)。
【问题讨论】:
-
天哪,你为什么不显示一个示例输出表,除了这个文字描述之外,期望的输出是什么样的?
-
如果您非常确定这是您想要的输出,那么您说
But this only show statistics for one question.是错误的。实际上,只需使用正确的查询选择两个额外的列 -
这里的 spmTekst 和 evalID 是什么?哪个表的哪一列?
-
spmTekst 是 questText,evalID 是surveyID。
-
我知道这只是选择两个额外的列(从两个表中),但添加到我的查询中并不容易。 :)
标签: mysql