Php 创建调度程序应用程序-过程和概念问题

Php 创建调度程序应用程序-过程和概念问题,php,mysql,Php,Mysql,如果有其他时间有人问或回答这个问题,我道歉-我想我的搜索一直在试图在服务器上调度PHP任务的人中丢失,所以我找不到我要找的内容 因此,作为我的第一个自建应用程序(不是指导或指导的应用程序),我正在尝试构建一个营地调度程序。我已经建立了登录、添加或删除隔间/组、添加活动/组或删除它们、生成日期范围以及从该数据中选择要调度的内容,然后将其发送给调度器,调度器随后创建新的MySQL表并 这就是我停下来思考的地方,我想知道我的想法是否正确 计划的每一次新运行是否应创建一个新表 可伸缩性(对于我来说,它

如果有其他时间有人问或回答这个问题,我道歉-我想我的搜索一直在试图在服务器上调度PHP任务的人中丢失,所以我找不到我要找的内容

因此,作为我的第一个自建应用程序(不是指导或指导的应用程序),我正在尝试构建一个营地调度程序。我已经建立了登录、添加或删除隔间/组、添加活动/组或删除它们、生成日期范围以及从该数据中选择要调度的内容,然后将其发送给调度器,调度器随后创建新的MySQL表并

这就是我停下来思考的地方,我想知道我的想法是否正确

  • 计划的每一次新运行是否应创建一个新表 可伸缩性(对于我来说,它是否可伸缩并不重要,但是 显然,这对其他项目有影响吗
  • 在将数据输入到数据库之前,是否应该对数组进行排序 MySQL表,或者我可以连续输入,然后输入下一个 正在排序的项目
最终,我不能只做循环赛,因为我需要添加其他因素,如:

  • 该组是否在最近X个计划周期内完成了此活动?如果是,请选择另一个
  • 不要总是从活动列表的顶部开始,否则一些活动将始终是计划,而一些活动将始终是第一个空的-甚至可以根据某些因素对重要性进行优先排序
  • 起初,我只想为小组的日期安排活动,但我还想添加一个功能,以便能够将另一个计划(小木屋的独木舟旅行)考虑在内,从而将他们排除在他们离开的日期的计划列表之外
非常感谢您在排序逻辑方面给予我的任何帮助。谢谢

编辑: 因此,根据您的建议,我认为我有以下表格,其中ID和name只有两列(用户可以随时更新/编辑):

然后,我添加了另一个表,该表最多有56列用于日期条目(8周)+一个名为name和user的列:

dates
然后我有另一张桌子,叫做:

schedule
其中有如下列:

ID (primary Key)
User (logged in user that created this)
schedule_name (user defined name of schedule)
cabin (foreign key of a cabin)
period_001 (foreign key of first date in corresponding 'dates' table)
activity_001 (foreign key of an available activity which has been chosen to go here)
period_002 (...)
activity_003 (...)
etc...
然后,PHP逻辑将要求按名称和用户分组的行,以便对于给定用户的每个计划名称,营地中每个选定的舱室都有一行(例如,25个舱室有25行)。“dates”表中的每一行都包含给定计划的整个日期范围


这就是你的想法吗?

如果我理解正确,这是一个数据库建模问题。从您的具体问题开始:

计划的每次新运行是否应创建一个新表

不,表代表一种类型的东西(就像OO实现中的类一样)。如果需要区分该表中的行组,则这是这些行的一个属性,可能是单独的实体。因此,对于每个“计划的新运行”,您都会有一个表,其中包含一行,然后在另一个表中使用外键引用该表

在将数据输入MySQL表之前,是否应该对数组进行排序

不可以。在数据库表中输入的订单行不应用于传递含义。如果它们具有某种特定的顺序,则创建该顺序的信息应位于表的一列中。在从数据库检索数据时,可以使用
orderby
子句对数据进行排序。(
选择
数据时,始终
包括一个
Order By
子句。)

您的第二组要点似乎从如何建模数据跳到了如何查询数据。因此,首先,请阅读以下内容:

  • 数据库规范化:简而言之,每个实体都应该有自己的表,它们之间的关系由外键定义
  • 实体关系图:不用担心学习所有的官方符号,但在Visio图或一张纸上绘制数据确实有助于理解事物之间的关系
一旦你对你的实体有了一个很好的概念,并且对它们有了一个规范化的结构,剩下的就应该是关于如何编写与它们相关的查询:

  • “此组是否在最后X个计划周期内完成了此活动?”可能涉及
    表之间的
    联接
    组(计划)活动
    透视表(即仅存在于以多对多关系关联两个或多个表的透视表)和
    计划(时间
    表)
  • “不要总是从活动列表的顶部开始…甚至可能能够对重要性进行优先级排序”是关于在UI中显示时如何从
    活动
    表中进行选择:可能是一个
    Order By
    子句,涉及您的优先级因子和随机因子。(某些数据库中的随机排序可能很棘手,但环顾四周,您会发现很多解决方案。)
  • 如果我的理解是正确的,“在另一个计划中加入一个因素,在他们离开的日子里将他们从计划列表中排除”将只是一种特殊的“活动”,它持续了很长时间,并且可能在UI中以不同的方式呈现。从数据建模的角度来看,这只需要活动属性(即
    活动
    表上的一列)来区分这些活动与“正常”活动。据推测,活动无论如何都会有一个“持续时间”属性

    • 如果我理解正确,这是一个数据库建模问题。从您的具体问题开始:

      计划的每次新运行是否应创建一个新表

      不,表代表一种类型的东西(就像OO实现中的类一样)。如果需要区分该表中的行组,则这是这些行的一个属性,可能是一个s
      ID (primary Key)
      User (logged in user that created this)
      schedule_name (user defined name of schedule)
      cabin (foreign key of a cabin)
      period_001 (foreign key of first date in corresponding 'dates' table)
      activity_001 (foreign key of an available activity which has been chosen to go here)
      period_002 (...)
      activity_003 (...)
      etc...