Time 如何防止时间重叠?

Time 如何防止时间重叠?,time,coldfusion,logic,Time,Coldfusion,Logic,我试图修正我用来比较日期、开始和结束时间的cfif语句。因此,if语句的第一部分工作正常,我设置了逻辑来检查日期是否相等,是否要比较数据库中的开始时间和从参数传递的开始时间,以及结束时间。在这种情况下,如果我已经: Date: 01/31/2016 Start Time: 8:30 AM End Time: 9:50 AM 我试着传递下面三个参数: Date 01/31/2016 Start Time 10:00 AM End Time: 10:40 AM 所以我的代码应该允许将其保存在数据

我试图修正我用来比较日期、开始和结束时间的cfif语句。因此,if语句的第一部分工作正常,我设置了逻辑来检查日期是否相等,是否要比较数据库中的开始时间和从参数传递的开始时间,以及结束时间。在这种情况下,如果我已经:

Date: 01/31/2016 Start Time: 8:30 AM End Time: 9:50 AM
我试着传递下面三个参数:

Date 01/31/2016 Start Time 10:00 AM End Time: 10:40 AM
所以我的代码应该允许将其保存在数据库中,因为我们没有时间段重叠。但是,在这个日期和时间,这应该只允许一次。但如果我不止一次地试图保存它,我的代码不会阻止它。以下是我使用的逻辑:

<cfif arguments.datepicker EQ qryTable1.DateMeet>
    <cfif ((arguments.StartTime LTE qryTable1.Stime AND arguments.EndTime LTE qryTable1.Stime) OR (arguments.StartTime GTE qryTable1.Etime AND arguments.EndTime GTE qryTable1.Etime))>
       <cfquery name="qryTable1" datasource="test">
           Insert Into Schedule(DateMeet, Stime, Etime)
           Values (<cfqueryparam cfsqltype="cf_sql_date" value="#arguments.datepicker#">,
                   <cfqueryparam cfsqltype="cf_sql_time" value="#arguments.StartTime#">,
                   <cfqueryparam cfsqltype="cf_sql_time" value="#arguments.EndTime#">)
       </cfquery>
    </cfif>  
<cfelse>
    <cfif arguments.datepicker EQ qryTable1.DateMeet>
         <cfquery name="qryTable1" datasource="test">
           Insert Into Schedule(DateMeet, Stime, Etime)
           Values (<cfqueryparam cfsqltype="cf_sql_date" value="#arguments.datepicker#">,
                   <cfqueryparam cfsqltype="cf_sql_time" value="#arguments.StartTime#">,
                   <cfqueryparam cfsqltype="cf_sql_time" value="#arguments.EndTime#">)
        </cfquery>
    </cfif>
</cfif>

插入计划(日期、时间、时间)
值(,
,
)
插入计划(日期、时间、时间)
值(,
,
)

如果我为同一个日期选择重叠时间,我仍然找不到为什么我的逻辑会被捕获,但是如果我选择了超出范围的某个时间并保存一次,那么我可以多次这样做。如果有人能看出我的逻辑有什么问题,请告诉我。多谢各位

这是一个格式化的注释。首先,通过查看数据来解决if/else逻辑问题。从以下内容开始:

<cfif arguments.datepicker EQ qryTable1.DateMeet>
match
<cfelse>
no match
<cfdump var = "datepicker is #arguments.datepicker# and query is "#qryTable1.DateMeet#">
</cfif>

比赛
没有对手

这是一个格式化的注释。首先,通过查看数据来解决if/else逻辑问题。从以下内容开始:

<cfif arguments.datepicker EQ qryTable1.DateMeet>
match
<cfelse>
no match
<cfdump var = "datepicker is #arguments.datepicker# and query is "#qryTable1.DateMeet#">
</cfif>

比赛
没有对手

我使用线条图来开发逻辑,以确保时隙不会重叠。总共有7例需要考虑,但可以减少到2例。如果a和b不重叠,则a的endDateTime小于b的startDateTime,或者a的endDateTime小于b的startDateTime

因此,要么:

    b         a
|-------| |-------|


根据您的要求,<或我使用线条图来开发逻辑,以确保时隙不重叠。总共有7例需要考虑,但可以减少到2例。如果a和b不重叠,则a的endDateTime小于b的startDateTime,或者a的endDateTime小于b的startDateTime

因此,要么:

    b         a
|-------| |-------|


根据您的要求,可以选择<或很好的解释。尽管在第二部分中,您是否打算编写“b的endDateTime小于a的startDateTime”?@user3023588-请记住CF是多线程的,因此使用当前方法可能会出现竞争条件。考虑在SQL中执行逻辑,只做插入,没有重叠。使用“结果”属性检查受影响的记录数。如果是
>0
,则说明插入成功。否则,它失败了,你可以忽略它,或者采取一些其他措施,比如抛出错误。很好的解释。尽管在第二部分中,您是否打算编写“b的endDateTime小于a的startDateTime”?@user3023588-请记住CF是多线程的,因此使用当前方法可能会出现竞争条件。考虑在SQL中执行逻辑,只做插入,没有重叠。使用“结果”属性检查受影响的记录数。如果是
>0
,则说明插入成功。否则,它将失败,您可以忽略它或采取其他一些操作,如抛出错误。对于涉及写入数据以澄清的cfquery标记,不必具有名称属性,只有
select
语句返回结果集。当与
insert/update/delete
一起使用时,查询变量将是未定义的。对于涉及写入数据以澄清的cfquery标记,不必具有name属性,只有
select
语句返回结果集。与
插入/更新/删除
一起使用时,查询变量将未定义。
    b         a
|-------| |-------|
    a         b
|-------| |-------|