我对php / mysql编程相当陌生,我很难弄清楚我正在试图构建的关系数据库的逻辑。问题是:
我正在建设一个网站,将允许我存储轮班,一个领导工作如下所示。

当我点击submit时,该站点将获取数据leaderName:"George“、shiftTimeArray: 11 an、1 1pm、6 1pm(从图片中的示例来看)和shiftDate,并将它们发送到SQL数据库。
稍后,我希望能够通过向mysql发送一个查询,检索该领导人收到的所有分数,并将其平均起来,从而获得一个人的平均分数。我知道构建表单和执行搜索的代码。但是,我很难想出与数据相关的表的逻辑。目前,我有一个名为响应的mysql表,该表包含以下字段:
leader_id
shift_date // contains the date that the leader worked
shift_time // contains the time that the leader worked
visit_date // contains the date that the survey/score was given
visit_time // contains the time that the survey/score was given
score // contains the actual score of the survey (1-5)我输入领导在一周开始时所做的轮班,然后在他们在一周内进来的时候输入调查分数。
,所以这里的问题是:,我应该创建哪些mysql表和字段来关联这些数据,这样我就可以查询领导者的名字,并从他们的所有调查中获得平均分数。
发布于 2014-04-23 13:43:44
你想要这样的桌子:
Leader (leader_id, name, etc)
Shift (leader_id, shift_date, shift_time)
SurveyResult (visit_date, visit_time, score)注意:省略了我可能会包括的Shift和SurveyResult的代理主键。
要查询,您加入轮班和调查小组的领导,并取平均值,然后乔恩,然后返回给领导者的名字。
查询可能类似于(但我并没有在MySQL中实际构建它来验证语法)。
SELECT name
,AverageScore
FROM Leader a
INNER JOIN (
SELECT leader_id
, AVG(score) AverageScore
FROM Shift
INNER JOIN
SurveyResult ON shift_date = visit_date
AND shift_time = visit_time --depends on how you are recording time what this really needs to be
GROUP BY leader ID
) b ON a.leader_id = b.leader_id发布于 2014-04-23 13:53:50
我要做的结构如下:
leaders
leaders_timetabke (每个领导者可以是多个)
survey_scores
选择l.id,l.name,AVG(s.score),从领导者l内连接leaders_timetable中选择lt.leader_id = l.id内连接survey_scores‘s ON lt.shift_datetime=DATE_FORMAT(’Y:00:00‘,s.visit_datetime)。
这里的DATE_FORMAT帮助减少了visit_datetime的时间和分钟,这样就可以与shift_datetime匹配。这是MYSQL函数,所以如果使用其他函数,则需要使用不同的函数
发布于 2014-04-23 13:44:26
假设你有一个“领导者”,他有5次调查,得分分别为1、2、3、4和5。
如果你从这个领导中选择所有的调查,把调查的分数加在一起,除以5(这个领导者的调查总数)。在本例中,您将得到平均值3。
(1 +2+3+4+ 5) /5=3
您不需要创建更多的表或字段,您就有了所需的。
https://stackoverflow.com/questions/23245834
复制相似问题