2012-03-14 55 views
2

为工作中的投影机制作简单的预约系统。基于计算时间槽的SQL过滤

这是场景。每台投影机可在一整天内将其可用性设置为四分之一小时。即投影机1在每天的上午8:15至下午1:45至下午3:00至5:15之间可用(也可以改变为每天设置不同的可用性)。只要投影机可用,您可以在一天中的任何时间段预订投影机。所以我的设置在我的sql数据库中(使用我的asp.net mvc前端)。

我的问题是什么是在这种情况下搜索的最佳方式。即用户A进来说,找到我在这个星期五下午12点至3点之间可用的投影仪。我努力编写一个高效的SQL查询,将过滤这个。到目前为止,我的最佳选择是退回所有投影机,并以编程方式解决它们是否可用,并且此时间之间没有预订。它有效,但效率非常低。我偶然发现了一个使用由存储过程生成的临时表的想法,该过程可以被过滤,但并不存在。

有没有人有任何想法我可以怎么办?

在此先感谢

+0

你至少需要显示数据库模式。最好是您在查询时的尝试。 – 2012-03-14 04:33:55

+0

你能否提供你的表结构? – 2012-03-14 04:34:32

回答

1

我可能会含有开始时间和结束时间的表叫ProjectorReservations(在其他领域,你是谁租投影机可能会在意即)。

搜索投影机将是这个样子:

SELECT projectorName 
FROM Projectors 
WHERE NOT EXISTS 
    (SELECT 1 FROM ProjectorReservations 
    WHERE Projectors.projectorName = ProjectorReservations.projectorName 
    AND (ProjectorReservations.startTime < {end_time} 
    OR ProjectorReservations.endTime > {start_time})) 

这几乎检查,以确保没有保留你正在寻找的目的,反之亦然一个之前启动。很明显,你需要相应地调换你的字段,但是这应该给你的总体思路