参见英文答案 >
mysql query room availability2个
希望在制定MYSQL查询时获得一些逻辑帮助,该查询获得的结果不在表的数据范围内.
希望在制定MYSQL查询时获得一些逻辑帮助,该查询获得的结果不在表的数据范围内.
我有一个名为schedule的表,其中包含数据类型为’time’的列,用于指示此特定计划何时开始和结束,以及从将在其中进行计划的表’rooms’引用的外键.在其搜索功能的PHP代码中,我想添加一个功能,显示当前没有被时间表占用或空置的房间的结果.我添加了一个jquery滑块来专门获取搜索者想要的开始时间和结束时间.
TABLE 'schedule' room sched_start sched_end 1 09:00:00 10:00:00 1 11:00:00 12:00:00 2 07:30:00 08:30:00 2 11:30:00 13:00:00
例如,搜索者想要从10:00:00到11:00:00搜索空房间.根据数据库,结果应显示搜索结果中应显示房间1和房间2,因为两个房间都不会在搜索者的指定时间内被占用.我想按时间顺序比较所有类似房间的时间表,第一行或第一个时间表的’sched_end’和后续行的sched_start或时间表等,以确定是否有空闲时间之间.谁可以帮我这个事?
所有的帮助和讨厌都会非常受欢迎,因为我可以在MysqL中使用尽可能多的菜鸟.
DROP TABLE IF EXISTS schedule; CREATE TABLE schedule (room INT NOT NULL,schedule_start TIME NOT NULL,schedule_end TIME NOT NULL,PRIMARY KEY(room,schedule_start) ); INSERT INTO schedule VALUES (1,'09:00:00','10:00:00'),(1,'11:00:00','12:00:00'),(2,'07:30:00','08:30:00'),'11:30:00','13:00:00'),(3,'09:30:00','10:30:00'),(4,'10:30:00','10:45:00'); SET @start:= '10:00:00'; SET @end:= '11:00:00'; SELECT DISTINCT x.room -- or whatever columns you want from whichever table you want FROM schedule x LEFT JOIN schedule y ON y.room = x.room AND y.schedule_start < @end AND y.schedule_end > @start -- other tables can join in here WHERE y.room IS NULL; +------+ | room | +------+ | 1 | | 2 | +------+
http://sqlfiddle.com/#!9/1b677/1
SELECT DISTINCT room FROM schedule WHERE @end <= schedule_start OR @start >= schedule_end; +------+ | room | +------+ | 1 | | 2 | | 3 | +------+