希望你能提供帮助。我试图从我设置的评级表中提取数据,但是我很难想出代码来完成它的工作。
这是我的表格布局及相关列:
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值替换为实际的问题或选项名称。
我希望这是有道理的。如果没有,我将创建一些示例数据。感谢
编辑:这是一些示例数据,因此我可以更好地解释我想要实现的结果。
数据以excel排序,以便于查看关系
我还只包含一个主题ID,但会有无限数量的主题。所以对于这个数据集,在按主题Id排序之后,我需要用questionID分隔以产生这样的结果。
问题3来自主题1,有3个人回答“2”,2个人回答“3”,2个回答“4”,而只有一个人用选项“3”回答问题5
首先使用此数据以大多数显示结果,但也用于显示结果的整体图表。
答案 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
但是,如果要从其他表中投影列,例如问题和主题。然后,您需要加入这些相应的表。