根据可用性和现有约会计算开放时间段 - 按天计算

时间:2010-12-23 17:20:57

标签: javascript sql scheduling

概述:

我有一张桌子,存储当天的人“可用性”,例如

星期一 - 上午8:00 - 上午11:30
周一 - 下午1:30 - 下午6:00

第二个表存储该人在同一天已经拥有的约会,例如

星期一 - 上午8:30 - 上午11:00
周一 - 下午2:30 - 下午4点

期望的结果:
做计算我想得到以下结果 - 例如“这个人在某一天有空房”:

<星期一 - 上午8:00 - 上午8:30 星期一 - 上午11:00 - 上午11:30 周一至下午1:30 - 下午2:30 周一至下午4:00 - 下午6:00

有关如何计算两个输入(例如可用性,现有约会)的输出的任何想法将不胜感激。我最好在客户端上使用javascript来进行计算,因为我相信在DB(我正在使用MSSQL)中执行此操作对于许多记录,人员等来说会很慢。

希望这足以说明手头的问题 - 非常感谢提前。

1 个答案:

答案 0 :(得分:0)

你需要将你的时间离散化。选择用作原子的时间间隔。根据你的例子,这应该是半小时。

现在

Create table Availability (person_id int, interval_id int);
Create table Appointment (person_id int, interval_id int, appointment_desc text);

我遗漏了主键,应该有外键来查找Person和Interval的表。

将有一个Interval表来查找每个interval_id代表的内容。

Create table Interval(interval_id int primary key, interval_start datetime, interval_end datetime)

使用您日历中的每个间隔填充Interval表。填充它可能是一件苦差事,但您可以在Excel中创建实际值,然后将它们粘贴到Interval表中。

现在您可以找到

的空闲间隔
Select person_id, interval_id from Availability av
left join Appointment ap
on av.person_id = ap.person_id and av.interval_id = ap.interval_id
where ap.interval_id is null

MSSQL可以立即执行此类外部联接(如果您设置了密钥),并且可以在发送的页面中包含空闲间隔列表,并使用javascript在需要时显示它们。