我正在实施一个停车预订系统,在这个系统中,用户会预留一个停车位。
预订表
columns
--------------
parkingSpaceId
VehicleId
UserId
startDate
startTime
EndDate
EndTime 空间表
columns
--------
avialableSpaces
noOfBookings用户可以使用参数startDate、startTime、EndDate、EndTime检查可用的停车位。
if avialableSpaces==noOfBookings就没有停车位了。
找出startDate、StartTime和EndDate、EndTime之间是否有停车位的逻辑是什么?
发布于 2014-04-22 08:31:42
通过询问parkingSpaceIds,您可以在特定时间获得可用停车场的数量,而在这个时间内,您的预定时间是开始还是结束。
顺便问一句:你为什么在你的桌子上分日期和时间?我能想到的唯一原因是有可能有一个没有另一个,例如一天没有指定的时间(也没有默认的时间相关)。如果是这样的话,您必须在上面的select中考虑到这一点。如果没有,您应该更改表的设计。
编辑:由于您的预订表有一个parkingSpaceId,我想也有一个停车位表,每个停车位都有记录。这是一份可能的声明。这取决于dbms,语句的外观如何。这里我使用甲骨文的AddTime函数将日期和时间结合起来,以便更容易地进行比较。总是需要处理单独的日期和时间字段,如果其中一个字段为空--这将是拆分的唯一合理原因--这就更加复杂了。您必须相应地调整语句。
select parkingspaceid
from parkingspaces s
where not exists
(
select *
from reservations r
where r.parkingspaceid = s.id
and
(
(
addtime(:startdate,:starttime) >= addtime(r.startdate,r.starttime)
and
addtime(:startdate,:starttime) < addtime(r.enddate,r.endtime)
)
or
(
addtime(:enddate,:endtime) >= addtime(r.startdate,r.starttime)
and
addtime(:enddate,:endtime) < addtime(r.enddate,r.endtime)
)
)
);发布于 2019-10-15 09:33:01
select parkingspaceid
from parkingspaces s
where not exists
(
select *
from reservations r
where r.parkingspaceid = s.id
and
(
(
addtime(:startdate,:starttime) >= addtime(r.startdate,r.starttime)
and
addtime(:startdate,:starttime) < addtime(r.enddate,r.endtime)
)
or
(
addtime(:enddate,:endtime) >= addtime(r.startdate,r.starttime)
and
addtime(:enddate,:endtime) < addtime(r.enddate,r.endtime)
)
)
);https://stackoverflow.com/questions/23214191
复制相似问题