【发布时间】:2012-04-15 08:28:58
【问题描述】:
请我在这方面需要帮助(为了更好地理解,请参阅附图),因为我完全无能为力。
如您所见,我有用户,他们将他们的开始和结束日期时间存储在我的数据库中,格式为 YYYY-mm-dd H:i:s。现在我需要根据最频繁的时间范围重叠(对于大多数用户)找出所有用户的重叠。我想为大多数用户获得 3 个最频繁的数据时间重叠。我该怎么做?
我不知道我应该使用哪个 mysql 查询,或者最好从数据库中选择所有日期时间(开始和结束)并在 php 中处理它(但是如何处理?)。如图像结果所述,例如时间 8.30 - 10.00 是用户 A+B+C+D 的结果。
Table structure:
UserID | Start datetime | End datetime
--------------------------------------
A | 2012-04-03 4:00:00 | 2012-04-03 10:00:00
A | 2012-04-03 16:00:00 | 2012-04-03 20:00:00
B | 2012-04-03 8:30:00 | 2012-04-03 14:00:00
B | 2012-04-06 21:30:00 | 2012-04-06 23:00:00
C | 2012-04-03 12:00:00 | 2012-04-03 13:00:00
D | 2012-04-01 01:00:01 | 2012-04-05 12:00:59
E | 2012-04-03 8:30:00 | 2012-04-03 11:00:00
E | 2012-04-03 21:00:00 | 2012-04-03 23:00:00
【问题讨论】:
-
请贴出表格结构。你想在当天/周/月/年/所有时间运行它吗?
-
从我的角度来看,如果它是当前日期/星期/等并不重要。因为例如用户 D 可以有开始日期时间 2012-04-01 01:00:01 和结束日期时间 2012-04-05 12:00:59,而用户 A 开始日期时间 2012-04-03 4:00:00 和结束日期时间 2012-04-03 10:00:00,用户 B 开始 2012-04-03 8:30:00 和结束 2012-04-03 14:00:00 但我的脚本应该检测这些用户的范围重叠作为开始 2012 -04-03 8:30:00 和 2012-04-03 10:00:00 结束用户 A+B+D。
-
以下示例基于为当天创建时间段而工作。这应该足以让您朝着正确的方向开始。
-
如果它们只重叠一秒怎么办?还是仅相差 3 微秒(在支持更高分辨率时间戳的不同 dbms 上)?
-
我还没有遇到过将约会管理到微秒级精度的人 ;) 尽管使用我提出的解决方案,您确实遇到了在 time_slot 上开始和结束预订的问题。这只是一个粗略的例子,让 OP 思考如何解决他的问题。