【问题标题】:Mysql query that will return free slots between timestamps in databaseMysql查询将返回数据库中时间戳之间的空闲槽
【发布时间】:2015-04-07 21:09:11
【问题描述】:

我在数据库中有三列 - event_id、timestamp 和 length_of_event_in_seconds。 每个事件的开头都有一些时间戳,现在我想生成一个查询,该查询将在一些时间戳之间的空闲时间插入新事件(持续 length_of_event_in_seconds) - 只要有“length_in_seconds”空闲点。有人可以帮我吗?

【问题讨论】:

  • 你说的; “介于”mysqltutorial.org/mysql-between - 你几乎回答了自己的问题。
  • 谢谢,我只是在查找可以在查询之间使用的正确值时遇到问题,我不知道如何检查空闲槽是否足够长以存储新事件
  • 查询并使用条件语句。 if/else
  • 你能帮我构建这样的查询吗?

标签: php mysql sql


【解决方案1】:

使用收集到的建议here

select * 
from table 
where ts_begin >= 'begin-boundary-time' 
    and ts_begin + interval length_of_event_in_seconds seconds <= 'end-boundary-time'

【讨论】:

  • 这实际上无法正常工作。它只会找到在搜索时间跨度之后开始和结束之前的事件。它不包括部分重叠或完全包含搜索时间跨度的事件。要找到重叠,您需要交换开始和结束“边界时间”。像ts_begin &lt;= 'end-boundary-time' and ts_end &gt;= 'begin-boundary-time' 这样的东西。这将为您提供重叠事件的列表。如果返回零行,则没有重叠。
  • 实际上,OP 正在寻找反向搜索——事件之间的空闲时间在哪里。我认为他对如何编写 where 子句来确定被认为是“免费”的时间感到困惑。即使这不能解决所写的问题(由于 OP 帖子在结构上含糊不清,它不能解决问题),它也应该在 where 子句上推动他朝着正确的方向前进。
  • 是的,如果表中有“空闲时间”的行。但是,更有可能存在包含事件的行,并且任何时间未安排的事件都被认为是免费的。
  • 嘿伙计们,我只是假设使用 PaulProgrammer 建议的逻辑不可能添加重叠事件,这实际上是我的目标 - 让一切井井有条而不重叠。在那种情况下 - Paul 建议的代码就足够了吗?
  • @randomuser2 他的代码只会找到我上面描述的事件。它不会找到部分重叠的事件或完全包含所描述的时间范围的事件。如果您交换开始/结束“边界时间”,那么它将返回在此期间发生的所有事件。如果为零,则没有任何重叠。如果有任何行,这些行会重叠,您可以进一步决定是否应该发生重叠。可能是一列说明共同使用/独占事件或一次可以发生多少事件的限制。
猜你喜欢
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
  • 1970-01-01
  • 2013-02-13
  • 1970-01-01
  • 1970-01-01
  • 2013-10-10
相关资源
最近更新 更多