0

我已经看过很多关于这个主题的 stackoverflow 答案,但它们似乎都来自不同的方向。这就是我想要做的事情,在这个阶段,我对实现它的方式比编写特定代码更让人头疼。

任务是显示用户可以根据他们现有的承诺看到的节目,无论这些节目不可用还是已经看到其他内容。

表 A 包含用户不可用的开始和结束时间列表

表 B 包含用户现有预订的开始和结束时间列表。

表 C 包含所有节目的开始和结束时间列表。

为了添加更多细节,我使用 FullCalendar 议程视图来显示用户的承诺。在我想展示的间隙中,他们可以看到。显示不可用性和现有承诺的代码已经编写好了,但我现在不知道要在表 C 中找到与表 A 和 B 中的条目不冲突的节目。

有任何想法吗?

4

1 回答 1

0

我的解决方案是针对 PHP 的,但我确信在 SQL 存储过程之类的东西中隐藏着更好的解决方案。

如果您使用 Unix Time,您可以通过比较开始时间和结束时间来简单地测试开放槽:

  1. 为用户动态创建可用插槽列表。
  2. 遍历这个列表,并将一个空档与表 C 中的每个节目进行比较。类似于

    if (
           (showtime['begin'] >> opentime['begin']) &&
           (showtime['end'] << opentime['end'])
       ) return true;
    
  3. 如果找到匹配项,请将其打印出来。

编辑:

经过一番思考,我想出了一个更好的解决方案。没有办法避免逐项比较所有内容。因此,诀窍是不要一次完成所有处理,而是将其分散到应用程序的整个生命周期中:

  • 编辑数据库并将持续时间字段添加到所有表中。
  • 制作一个在表更新时触发的存储过程(mySQL 可以做到这一点,对吗?)。此过程计算持续时间并填充该元组的相应字段。
  • 现在你选择所有持续时间=<一些开放槽的元组

这样,所有繁琐的工作都在 SQL 中完成,而不是在 PHP 中,所以它可以更快。

于 2013-05-08T12:38:04.267 回答