我正在为我们的投影仪做一个简单的预订系统。
这是一个场景。每台投影仪可以将其可用性设置为全天的一刻钟段。也就是说,投影仪1在每天上午8:15-下午1:45到下午3:5-5:15之间可用(也可以更改为每天设置不同的可用性)。投影仪可以在一天中的任何时间段预订,只要它是可用的。因此,我在我的sql数据库中(使用我的asp.net mvc前端)进行了设置。
我的问题是,在这种情况下搜索的最佳方式是什么。例如,UserA走进来,说给我找本周五中午12点到3点之间可用的投影仪我正在努力编写一个有效的sql查询来过滤这一点。到目前为止,我最好的选择是撤回所有投影仪,然后程序化地计算出它们是否在这段时间内可用但没有预订。它是有效的,但效率低得令人难以置信。我偶然想到了使用由存储过程生成的临时表的想法,该临时表可以被过滤,但它并不完全在那里。
有没有人知道我该怎么做?
提前感谢
发布于 2012-03-14 12:38:18
我可能有一个名为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}))这在很大程度上是为了确保在你想要的那个结束之前没有预订开始,反之亦然。显然,您需要相应地在字段中进行交换,但这应该会给您一个大概的概念
https://stackoverflow.com/questions/9695952
复制相似问题