按照上面的语句只要能够查询得到纪录,就表示数据库中已经有和提供的时间段重复的时间安排了。这样就表示新排配的时间非法。如果查询没有得到纪录。就表示合法。修改一下语句。 declare @courseint int select @courseint = count(*) from table where ((starttime >=4:00 and starttime<6:00) or (endtime>4:00 and endtime<=6:00)) if(@courseint>0) begin 提供时间非法 end else begin 提供的时间合法 end 估计还应该有教室的问题。所以楼主在查询语句后面加上教室的条件
select count(*) from table where starttime<=time1 and endtime>=time2就可以知道是否有空教室了
再加一个条件 按照上面的语句只要能够查询得到纪录,就表示数据库中已经有和提供的时间段重复的时间安排了。这样就表示新排配的时间非法。如果查询没有得到纪录。就表示合法。修改一下语句。 declare @courseint int select @courseint = count(*) from table where ((starttime >=4:00 and starttime<6:00) or (endtime>4:00 and endtime<=6:00) or (starttime<=4:00 and endtime>=6:00)) if(@courseint>0) begin 提供时间非法 end else begin 提供的时间合法 end 估计还应该有教室的问题。所以楼主在查询语句后面加上教室的条件
假设要测试与表中已有时间段有无冲突的时间段为 T1-T2SELECT * FROM TABLENAME WHERE ( T1 < STARTTIME AND T2 >= STARTTIME ) OR ( T1 >= STARTTIME AND T1 <= ENDTIME )若有记录返回,表示有冲突!
newClass表示目前正要排课的老师所占用的教室, time1表示目前正要排课的老师所占用的时间的起始时间,time2表示目前正要排课的老师所占用的时间的结束时间.class表示数据库中教室的字段名,startTime表示数据库中排课的起始时间字段名,endTime表示数据库中排课的结束时间字段名 .select * from table where newClass in (select class from table where (startTime>=time1 and startTime<=time2) or (endTime>=time1 and endTime<=time2)) 如果此记录集不为空,则表示有冲突,不允许排课,反之,允许.
是不是要求 3:55-4:05 也要保证第一条记录正确? ( 这样子第一条记录也是正确的)并且您提供的这两个时间段不能跟任何记录的时间段有交集
是不是要求 3:55-4:05 也要保证第一条记录正确? ( 这样子第一条记录也是正确的)
xiaohuozhi()
并且您提供的这两个时间段不能跟任何记录的时间段有交集
-------------
是不是说3:55-4:35 这个时间段 所有记录为假?
是不是说3:55-4:35 这个时间段 所有记录为假?如果为这个时间的话,那么证明你给的这两个时间为假。其实也就是说,我要做的是一个老师排课系统,要给老师添加课程,因为课程考虑到
时间关系和教室,所以呢,他添加的课程所安排的时间段不能跟教室还有时间有冲突。
例如: 教室A的占用时间表为:
8:00---10:00
12:00--13:00
19:00-20:00如果时间为10:30 -- 13:30
那么这样的话时间段两端不在其它的时间段内。但这样也是非法的!
又要如何一起处理呢?SQL要怎么弄?呜!
or (endtime>4:00 and endtime<=6:00))
这样就可以了呀
输入时候判断 time1不能再0:00-8:00和11:00-12:00和17:00-24:00之间,time2不可以再0:00-8:00和17:00-24:00和time1之前就可以了
declare @courseint int
select @courseint = count(*) from table where ((starttime >=4:00 and starttime<6:00)
or (endtime>4:00 and endtime<=6:00))
if(@courseint>0)
begin
提供时间非法
end
else begin
提供的时间合法
end
估计还应该有教室的问题。所以楼主在查询语句后面加上教室的条件
按照上面的语句只要能够查询得到纪录,就表示数据库中已经有和提供的时间段重复的时间安排了。这样就表示新排配的时间非法。如果查询没有得到纪录。就表示合法。修改一下语句。
declare @courseint int
select @courseint = count(*) from table where ((starttime >=4:00 and starttime<6:00)
or (endtime>4:00 and endtime<=6:00) or (starttime<=4:00 and endtime>=6:00))
if(@courseint>0)
begin
提供时间非法
end
else begin
提供的时间合法
end
估计还应该有教室的问题。所以楼主在查询语句后面加上教室的条件
老师添加课程总不可能添加“不合法”的时间段进去吧
不用每次都check吧?
只要确定添加进去的starttime和endtime没有和table里面的记录完全一样的不就行了哎,这样很损伤脑细胞啊
干嘛要这么麻烦啊
老师添加课程总不可能添加“不合法”的时间段进去吧
不用每次都check吧?
只要确定添加进去的starttime和endtime没有和table里面的记录完全一样的不就行了哎,这样很损伤脑细胞啊---------------------------------------------------------------------------
没办法呀,因为我们这项目要用到呀。
教室有N个,老师也有N个呀。他们添加课程时当然不能在同一个教室里面有重叠的
时间嘛,就像学校一样,不可能安排两门不同的课在同一个时间的同一个教室上吧!
例如: 教室A的占用时间表为:
8:00---10:00
12:00--13:00
19:00-20:00如果时间为10:30 -- 13:30
那么这样的话时间段两端不在其它的时间段内。但这样也是非法的!
又要如何一起处理呢?SQL要怎么弄?呜!
---------------
1 那就再增加一个条件:
对表中数据再遍历,保证其不再给出时间之间
例如:你的例子中 给出时间为10:30 -- 13:30,
占用表中,12:00--13:00 在这两者之间,则可判定输入非法
这样做很费时间的,建议写成存储过程。
2 可以给对象教室增加一个属性:占用情况位图,以10分钟为一个单位,
0表示空闲,1表示已被占用。插入一个时间时,察看其所占用区段是否
有1,如果有,则输入非法。
这样做得用到Serializable 和同步机制,也是较费时间--
不过要不是很频繁的读写,还可以忍受
干嘛要这么麻烦啊
老师添加课程总不可能添加“不合法”的时间段进去吧
不用每次都check吧?
只要确定添加进去的starttime和endtime没有和table里面的记录完全一样的不就行了哎,这样很损伤脑细胞啊
--------------------------------------------这位老兄,象你这样设计程序是不行地,你要考虑到各种可能。
...把教室和时间做为主键.这样不就OK???
只要有重复的就不行..
别往牛角里钻!~~~
------------------------------------------
那同一时间在不同教室的课怎么排?同一教室不同时间的课怎么排?
考虑多点还是有必要的!
OR ( T1 >= STARTTIME AND T1 <= ENDTIME )若有记录返回,表示有冲突!
.select * from table where newClass in (select class from table where (startTime>=time1 and startTime<=time2) or (endTime>=time1 and endTime<=time2)) 如果此记录集不为空,则表示有冲突,不允许排课,反之,允许.