SQL连接和关系表的问题

时间:2016-02-08 05:02:17

标签: sql join relational-database

希望你能提供帮助。我试图从我设置的评级表中提取数据,但是我很难想出代码来完成它的工作。

这是我的表格布局及相关列:

inah_topic

topicID    |    topicName
--------------------------------

inah_qoptions

optionID   |   questionID    |   Option   |  OptionValue
----------------------------------------------------------

inah_question

questionID |    Question
---------------------------

inah_rating

ID    |  userID  |  topicId  |  QuestionID  |  optionValue
-----------------------------------------------------------

我要做的是为每个主题计算每个问题的结果。

每个主题将具有相同的评级集(问题)例如:具有多个选项的容易入口[值](容易= 1,中等= 2,硬= 3)

因此,当用户参与每个主题时,他们会对十几个问题中的每一个进行评分。

因此,对于“用户= 1”的问题“容易入口= 1”,主题“摄影= 1”可以被评为“easy = 1”,或者可以被另一个用户评价为中等= 2。

因此,在主题页面上,我需要分离每个主题的结果。

使用Select * from inah_rating where topicid= $topicId

这很容易

但我无法找出查询和其他代码来分别计算每个结果的结果。

我相信我需要一个foreach集,但我不确定如何从查询中进行设置

基本上,根据每个唯一的问题ID计算每个$ ovalue

理想情况下,查询还应Join使用question和question-options表将ID值替换为实际的问题或选项名称。

我希望这是有道理的。如果没有,我将创建一些示例数据。感谢

编辑:这是一些示例数据,因此我可以更好地解释我想要实现的结果。

Sample Data

数据以excel排序,以便于查看关系

我还只包含一个主题ID,但会有无限数量的主题。所以对于这个数据集,在按主题Id排序之后,我需要用questionID分隔以产生这样的结果。

问题3来自主题1,有3个人回答“2”,2个人回答“3”,2个回答“4”,而只有一个人用选项“3”回答问题5

首先使用此数据以大多数显示结果,但也用于显示结果的整体图表。

1 个答案:

答案 0 :(得分:0)

根据我对您的架构的理解,为了计算特定主题的结果数量,您可以通过使用questionid对您的评级表进行分组,然后将count(*)与questionid一起计算出来。有点喜欢,

SELECT COUNT (*), questionID
FROM inah_rating
WHERE inah_rating.topicid = $topicId
GROUP BY questionID

如果您想计算每个主题的结果,那么您也可以按topicId进行分组。有点喜欢,

SELECT COUNT (*), questionID, topicId
FROM inah_rating
WHERE inah_rating.topicid = $topicId
GROUP BY questionID, topicId 

但是,如果要从其他表中投影列,例如问题和主题。然后,您需要加入这些相应的表。