我已经把它搞砸了。这将是一个简单的小数学逻辑问题。但是对于我的生活,我无法让它正常运作。
尽量避免在预订系统中预订双重内容。目前的代码......
and schdate = #createODBCDate(schdate)#
and ( schstart >= #createODBCTime(stime)# and
actend <= #createODBCTime(actend)#
)
基本上尝试检查 - 如果说开始时间是日期的下午2点,并在下午3点结束...... 我需要检查一下我是否正在尝试预订重叠的内容...试着在下午2:15预订... 应该用支票说 - 冲突。
所以认为这是数学逻辑的事情 - 不是ColdFusion的事情......今天只是一个空气大脑......
Thanx for lead - 我想我可能已经想到了 - 仍在测试......下面似乎有效。开发链接提供了洞察力。
and schdate = #createODBCDate(schdate)#
and schstart < #createODBCTime(actend)#
and actend > #createODBCTime(stime)#
答案 0 :(得分:1)
<强>更新强>
以下原始查询的Merle_the_Pearl's revision更直观一些。基本上反转比较:
WHERE DateColumn = #RequestedDate#
AND StartTimeColumn < #RequestedEndTime#
AND EndTimeColumn > #RequestedStartTime#
我记得在这个主题上看到一个很棒的主题:Finding overlapping dates。 (ASCII插图是一个很好的接触:)。假设您的预订不会持续多天,那么它也应该可以正常运行。
通常的方法是检查每种类型的冲突:
该链接提到了一种更优雅的方法。从本质上讲,它将所有这些步骤减少到单个过滤器。
WHERE FE >= SD and FS <= ED
如果找到匹配项,则表示存在冲突。翻译应该看起来像这样(未经测试)。
SELECT Columns
FROM SomeTable
WHERE #RequestedEndTime# >= StartTimeColumn
AND #RequestedStartTime# <= EndTimeColumn
AND DateColumn = #RequestedDate#
NB:为清楚起见,我故意省略了cfqueryparam
。显然我建议在实际查询中使用它。