Mysql 关系数据库逻辑
我对php/mysql编程相当陌生,我很难弄清楚我试图构建的关系数据库的逻辑。问题是:Mysql 关系数据库逻辑,mysql,Mysql,我对php/mysql编程相当陌生,我很难弄清楚我试图构建的关系数据库的逻辑。问题是: 我有不同的领导,他们将在上午9点到晚上9点之间随时负责一家商店 访问过该商店的客户可以对其体验进行1到5分的评分 我正在建立一个网站,允许我存储一位领导的班次,如下所示 当我点击submit时,该站点会将数据引导名“George”、shiftTimeArray:11am、1pm、6pm(来自图片中的示例)和shiftDate发送到SQL数据库 稍后,我希望能够通过向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表和字段来关联这些数据,以便查询领导者的姓名并从他们的所有调查中获得平均分数?您想要这样的表:
Leader (leader_id, name, etc)
Shift (leader_id, shift_date, shift_time)
SurveyResult (visit_date, visit_time, score)
注意:省略了我可能包括的Shift和SurveyResult的代理主键
若要查询,请加入“班次和调查”组,然后将平均值返回给“领导”,以获取名称
查询可能类似于(但我还没有在MySQL中构建它来验证语法)
假设你有一个“领导者”,他有5个调查行,得分分别为1、2、3、4和5 如果选择此领导的所有调查,则将调查分数相加并除以5(此领导的调查总数)。在本例中,您将获得平均值3 (1+2+3+4+5)/5=3
您不需要再创建任何表或字段,您已经拥有了所需的内容。我将执行以下结构: 领导者
- 身份证
- 名字
- 身份证
- 领导id
- shift_datetime(我假设它在这里存储日期和小时,分和秒总是0
- 身份证
- 访问时间
- 得分
这里的日期格式有助于缩短访问日期时间的小时和分钟,以便与shift\u datetime匹配。这是MYSQL函数,所以如果您使用其他函数,您需要使用不同的函数,而不是我的函数+1@Milanzor.不一定更好,只是更典型的关系型。我的可能对OPs-ne来说太过分了eds.单表解决方案必须为每个调查复制leader和shift信息,因此在插入新调查时,它必须以某种方式查找该信息,这将成为问题。
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
SELECT l.id, l.name, AVG(s.score) FROM leaders l
INNER JOIN leaders_timetable lt ON lt.leader_id = l.id
INNER JOIN survey_scores s ON lt.shift_datetime=DATE_FORMAT('Y-m-d H:00:00', s.visit_datetime)
GROUP BY l.id