概述:
我有一张桌子,存储当天的人“可用性”,例如
星期一 - 上午8:00 - 上午11:30
周一 - 下午1:30 - 下午6:00
第二个表存储该人在同一天已经拥有的约会,例如
星期一 - 上午8:30 - 上午11:00
周一 - 下午2:30 - 下午4点
期望的结果:
做计算我想得到以下结果 - 例如“这个人在某一天有空房”:
有关如何计算两个输入(例如可用性,现有约会)的输出的任何想法将不胜感激。我最好在客户端上使用javascript来进行计算,因为我相信在DB(我正在使用MSSQL)中执行此操作对于许多记录,人员等来说会很慢。
希望这足以说明手头的问题 - 非常感谢提前。
答案 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在需要时显示它们。