作者jomi5566 (啾咪5566)
看板Database
标题Re: [SQL ] 时间区间中的数量
时间Sat Aug 31 14:32:35 2013
※ 引述《jomi5566 (啾咪5566)》之铭言:
: 大家好
: 我必须要写一个系统管理某一种可被借用的资源
: 东西会借出又归还, 我要写的是预约系统, 让大家先查也没有数量可以借
: 预约单中我存了开始日期sDate, 结束日期eDate
: 可是问题是, 以下是订单预约时间, 假设系统中有三台设备
: A--------------- B---------
: C---------
: 这个时候如果D进来预约
: A--------------- B---------
: C---------
: D-------------------
: 然後我用 SELECT (*) from `order` WHERE sDate BETWEEN D.sDate AND D.eDate
: OR eDate BETWEEN D.sDate AND D.eDate
: 会选出3笔订单, 则3等於系统可用数量3, 就只能回没有数量可借
: 但是从上面那个图可以看得出来D是还有数量的
: 因为B会拿A还的那台, 我要怎麽做才可以处理这个情况呢?
: 我觉得我存的讯息好像太少了
: 是不是没有办法解决这个情况
: 不知道一般这种情况大家是用什麽方法来做的?
: 谢谢
自问自答, 我想了一下, 现在是这样做, PO出来让大家看看有没有问题
补充一下命题, 系统中有 3 台设备
已经有 3 笔订单, A:2~7 B:11~15 C:4~9
时间轴 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A:---2~7---------- B:----11~15-------
C:----4~9-------
这时候如果D进来预约7~12
时间轴 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A:---2~7---------- B:----11~15-------
C:----4~9-------
D:----7~12---------
我就拿7~12每一天都去问一次DB, 得到:
7:有2笔(A,C)
8:有1笔(C)
9:有1笔(C)
10:有0笔
11:有1笔(B)
12:有1笔(B)
最大值2 < 系统有的数量 3, 所以还有机器可以借, 订单D成立
我知道这问题可能是DB query很大, 一次查询大概是5~10次 DB query
(实际数据, 因为我要借的东西大概就是被借5~10天)
但是因为我的系统loading算很小, 目前一天大概20个人来用
未来也许成长到50人, 算起来一个小时大概不超过10个人用
我觉得应该是还OK
不过因为我没有很有DB的经验
不知道大家有没有什麽看法?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 98.164.236.108