我对这件事了如指掌。这将是一个简单的数学逻辑问题。但对于我的生活,我无法使它正常运作。
尽量避免预订系统中的双重预订。当前代码..。
and schdate = #createODBCDate(schdate)#
and ( schstart >= #createODBCTime(stime)# and
actend <= #createODBCTime(actend)#
)基本上试着做一个检查-如果说开始时间是下午2点在日期和结束在下午3点.我需要检查一下我是否想订一些重叠的东西.比如要在下午2点15分预定.它应该用查证的话-冲突来启动。
所以认为这是数学逻辑-不是ColdFusion的事.今天只是空中的大脑..。
谢谢-我想我可能已经猜到了-还在测试.下面的内容似乎很有效。Dev链接提供了洞察力。
and schdate = #createODBCDate(schdate)#
and schstart < #createODBCTime(actend)#
and actend > #createODBCTime(stime)#发布于 2014-10-08 21:23:42
更新:
下面的原始查询的珀尔修正更直观一些。从根本上来说,比较是相反的:
WHERE DateColumn = #RequestedDate#
AND StartTimeColumn < #RequestedEndTime#
AND EndTimeColumn > #RequestedStartTime#我记得在这个主题上看到了一条很棒的帖子:找出重叠日期。( ASCII的插图是一个很好的触摸:)。假设您的预订不跨越多天,它也应该工作良好的时间。
通常的方法是检查每种类型的冲突:
该链接提到了一种更优雅的方法。本质上,它将所有这些步骤简化为一个单一的过滤器。
WHERE FE >= SD and FS <= ED如果它找到了匹配,你就知道有冲突。翻译应该像这样(未经测试)。
SELECT Columns
FROM SomeTable
WHERE #RequestedEndTime# >= StartTimeColumn
AND #RequestedStartTime# <= EndTimeColumn
AND DateColumn = #RequestedDate#注:,为了清晰起见,我故意省略了cfqueryparam。显然,我建议在实际查询中使用它。
https://stackoverflow.com/questions/26266152
复制相似问题