我在做个借教室的系统,有个Classroominfo表,Borrowtable表;查不占用教室的信息,课程占用节数这出问题了,我有三个字段,use_begin,use_week,use_end,分别是占用其实节,占用星期几,占用结束节。上课是分段的(1-2,3-4或3-5,6-7,8-9或8-10,11-12或11-13) 如果我查按照从第一节到第6节没占用的教室,我先查Borrowtable表里面存在1-6节的教室,select * from Borrowtable where Use_begin >=1 and Use_begin >=6 and Use_End >=1 && Use_End <=6 and Use_Week=1(这里会查到好几个相同教室id,因为教室分段嘛),然后在查Classroominfo中id不在 查到的id里面的教室;
但是这样结果是会查到第6节有课的教室,请问该怎么解决?或者换种要求,查1-6节,就是同时满足1-2,3-4或3-5,6这几个段有课的记为一条记录
貌似你这和火车票查询如出一辙啊~我觉得这个表设计有点问题。如果把每个节点作为一条数据更好。
use_week(使用星期),use_node(使用节点)。每次借1~2的话,就插入两条记录。
--这就是前6节中有占用的教室
select * from Borrowtable where Use_End <=6
--然后用not in (not exist)查询就可以了哇
数据库是别人设计的,不好改,改了怕影响其他的东西!虽然你的说法我也很赞同,这样操作起来会方便很多! 还有你给我的查询语句不行的,我之前试过,因为我的是分段的, use_end不可能等于6 它就只有,(2,4或5,7,9或10,12或13)这几种取值,如果查小于等于6的话,会把6-7节有课的一起查出来! 最后我就采用了笨办法,在程序里面先加个判断用户选取的开始节和结束节,如果没有取得结束节的那几种取值,就变为这几种取值! 开始节也一样,如果不在开始节对应取值,就变为相应取值!
@cvxcrfa: 嗯,对,还需要对use_start做下判断,呵呵~
我看了两遍都没有看明白你问题。 你的给的信息很不详细。
就是我想按照占用教室的节数来查,(1-2,3-4或3-5,6-7,8-9或8-10,11-12或11-13)节数段, 比如我想查存在1-5节的教室,现在我查到的同个ID在1-2有条记录,3-5有条记录,如何让同时满足两个时间段内的ID记为一条记录?
看这问题描述跟看英文阅读似的,好无助啊