mysql - 安排事件并让事件跨越午夜

标签 mysql ruby-on-rails time schedule period

我正在 Ruby on Rails 中构建一个电视剧调度应用程序,该应用程序根据当前电视上的内容执行某些操作。用户可以创建具有开始日期和结束日期的系列,并且可以为这些系列创建广播。广播可以在三个 channel 之一上进行,形式为“每周二, channel 2,从 10:00:00 到 14:00:00”。

目前,我将这些广播存储在 MySQL 中,其中包含以下列:wday 整数、starts_atends_at 时间字段,和一个 channel_id 整数。因此,上述广播将存储为 wday 2、channel_id 2、starts_at "10:00:00"和 ends_at“14:00:00”,以及对其所属事件的引用。广播可以“跨越”午夜,因此应用程序应允许以“23:00:00”开始并以“02:00:00”结束(即第二天凌晨 2 点)的广播。

我遇到了以下两个问题的严重问题:

  • 只能在特定时间、特定时间安排一次广播 channel 。该应用程序需要验证用户输入,并检查是否 存在特定 channel 和时间的广播。

  • 应用程序需要显示当前显示的广播(如果有) 三个 channel 中的。基本上,对于每个 channel ,找到一个广播 开始时间 < 当前时间 < 结束时间。显然,这需要 也可以处理午夜广播。

我完全不确定使用时间字段作为开始/结束时间是否是最佳解决方案。请记住,我需要存储时间值,而不是日期,因为在该系列的持续时间内每周二都会进行广播。

您将如何存储这些广播,允许验证并允许在特定时间附近查询,允许广播“跨越”午夜?

最佳答案

这种问题是边缘情况的雷区,我总是将逻辑委托(delegate)给像 IceCube ( https://github.com/seejohnrun/ice_cube ) 这样的东西。它是为了处理这些类型的重复计划而设计的,并且对序列化等提供了简单的支持。即使它需要重新思考你如何做事,我也强烈建议使用它。

关于mysql - 安排事件并让事件跨越午夜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16853284/

相关文章:

php - 禁用夏令时功能

mysql 在每个类别中选择 5 个随机问题

mysql - 在基本的 MySQL 项目中使用哪种隔离级别?

mysql - SQL 中 VARCHAR(x) 和 VARCHAR(y) 的区别

mysql - 更新时,如果我的参数之一为空,如何从数据库中删除它?

time - 程序员每周应该花多少时间用于编码和学习

javascript - 使用php从库中获取行数据

jquery - 带有 jquery $.ajax 的 Rails

ruby-on-rails - 将Searchkick与分页一起使用时出现未定义的方法错误

Ruby:如何从 CSV 文件中计算给定 2 个日期时间的持续时间?