Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过多个时间间隔查找重叠的更好方法_Php_Mysql_Database_Algorithm_Data Modeling - Fatal编程技术网

Php 通过多个时间间隔查找重叠的更好方法

Php 通过多个时间间隔查找重叠的更好方法,php,mysql,database,algorithm,data-modeling,Php,Mysql,Database,Algorithm,Data Modeling,这里的目标是获得多个用户的议程。并匹配共享相同空闲时间的用户 出于性能方面的考虑,我希望Mysql(或任何替代方案)能够完成这项工作。因此,伙伴匹配任务将通过触发器或服务器的Cron作业执行 |userId|agenda |buddies |22 |{"week":[ "36-42", "49-52", "68-73"]} |9,6,23 |23 |{"week":[

这里的目标是获得多个用户的议程。并匹配共享相同空闲时间的用户

出于性能方面的考虑,我希望Mysql(或任何替代方案)能够完成这项工作。因此,伙伴匹配任务将通过触发器或服务器的Cron作业执行

    |userId|agenda                                        |buddies
    |22    |{"week":[ "36-42", "49-52", "68-73"]}         |9,6,23
    |23    |{"week":[ "26-32", "61-70", "68-75","79-85" ]}|9,5,22

我的想法是假设所有空闲时间范围都是每周重复发生的事件。任何例外都将以不同的方式处理

我认为一周中每小时的唯一标识符(基数168)可以避免额外的每日循环 因此,时间间隔可以转换为如下形式:

{"weekly":[ "36-42", "49-52", "68-73" ]}
我习惯于时间间隔与日期范围重叠。但在这里我想找到不同维度的多个有序区间的任何可能的交集

JSON\u EXTRACT
之后,MySql是否可以找到交集并返回其用户ID

按照这种方法,并使用新的Json函数,哪个DBMS能够更好地处理这种数据结构?Mysql还是Sqlite


欢迎使用任何不同的视图或替代数据模型:)

您使用JSON(从而降低了3NF)然后仍然期望MySQL是解决此问题的最佳解决方案的方法充其量是不合理的。在最坏的情况下,这是荒谬的。更合理的方法是对数据进行规范化,例如,您可以使用间隔(例如UNIX时间戳)将每个事件/繁忙时间的规范化行存储为一个范围,而不是将非标量数据存储在单个列中。例如,可以使用
BETWEEN
子句更容易地扫描重叠间隙。您可能需要进一步筛选以找到足够大的间隔,但这只是一个开始。简单地说,这与Google Calendar试图通过将时间间隔标准化为5分钟块来解决的调度问题是一样的(从而减少了在一大组重叠日历上计算大范围所需的数据量。通过将计划缓存到压缩位图中,从而实现简单的指针算法(
XOR
,在这种情况下),可以进一步提高性能)可以在位图上执行,以在多项式时间内进行计算。我认为json将是一种清晰的格式。实际上,我正在考虑将范围对象转换为Mysql可以处理的内容。我认为重复事件的Unix时间戳将需要额外的表来定义周期性。这更像是我正在寻找的一种算术算法这里.Json是存储数组的最佳格式…但我仍在集思广益:)为什么连数组都有?Thx对于缓存提示,通过重新定义您的问题,它基本上与查找酒店中所有可用房间的日期列表(例如,您当前好友的可用时间列表)相同。这是一个相对的问题,应该为您提供想法、数据结构和代码。这似乎不是一个算法问题,而是一个如何存储(可能是缓存/预计算/准备/…)数据的问题(正如Sherif指出的,将数据存储为json可能不是一个非常常见的选择).
通过触发器或服务器的Cron作业。
为什么?