首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关系数据库逻辑

问关系数据库逻辑
EN

Stack Overflow用户
提问于 2014-04-23 13:27:56
回答 3查看 70关注 0票数 1

我对php / mysql编程相当陌生,我很难弄清楚我正在试图构建的关系数据库的逻辑。问题是:

  1. 我有不同的领导,他们将在上午9点到晚上9点之间管理一家商店。
  2. 参观过这家商店的顾客可以将他们的体验评分在1到5之间。

我正在建设一个网站,将允许我存储轮班,一个领导工作如下所示。

​

​

当我点击submit时,该站点将获取数据leaderName:"George“、shiftTimeArray: 11 an、1 1pm、6 1pm(从图片中的示例来看)和shiftDate,并将它们发送到SQL数据库。

稍后,我希望能够通过向mysql发送一个查询,检索该领导人收到的所有分数,并将其平均起来,从而获得一个人的平均分数。我知道构建表单和执行搜索的代码。但是,我很难想出与数据相关的表的逻辑。目前,我有一个名为响应的mysql表,该表包含以下字段:

代码语言:javascript
复制
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表和字段来关联这些数据,这样我就可以查询领导者的名字,并从他们的所有调查中获得平均分数。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-23 13:43:44

你想要这样的桌子:

代码语言:javascript
复制
Leader (leader_id, name, etc)  
Shift (leader_id, shift_date, shift_time)
SurveyResult (visit_date, visit_time, score)

注意:省略了我可能会包括的Shift和SurveyResult的代理主键。

要查询,您加入轮班和调查小组的领导,并取平均值,然后乔恩,然后返回给领导者的名字。

查询可能类似于(但我并没有在MySQL中实际构建它来验证语法)。

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2014-04-23 13:53:50

我要做的结构如下:

leaders

  • id
  • 名字

leaders_timetabke (每个领导者可以是多个)

  • 身份证,
  • leader_id
  • shift_datetime (我假设它在这里存储日期和时间,分钟和秒总是0

survey_scores

  • 身份证,
  • visit_datetime
  • 得分

选择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函数,所以如果使用其他函数,则需要使用不同的函数

票数 1
EN

Stack Overflow用户

发布于 2014-04-23 13:44:26

假设你有一个“领导者”,他有5次调查,得分分别为1、2、3、4和5。

如果你从这个领导中选择所有的调查,把调查的分数加在一起,除以5(这个领导者的调查总数)。在本例中,您将得到平均值3。

(1 +2+3+4+ 5) /5=3

您不需要创建更多的表或字段,您就有了所需的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23245834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档