Time 如何防止时间重叠?
我试图修正我用来比较日期、开始和结束时间的cfif语句。因此,if语句的第一部分工作正常,我设置了逻辑来检查日期是否相等,是否要比较数据库中的开始时间和从参数传递的开始时间,以及结束时间。在这种情况下,如果我已经: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 所以我的代码应该允许将其保存在数据
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
|-------| |-------|