希望从表中获得可用的预订时间

时间:2019-01-18 09:11:15

标签: mysql

我有2张桌子,其中有时间

第一张表

id    time

 1.     9:00
 2.     10:00
 3.     11:00
 4.     12:00
 5.     01:00
 6.     02:00
 7.     03:00

第二张表是我的预订表,用户在其中进行约会

id    start_time end_time


 1.     9:00      10:00
 2.     10:00     12:00
 3.     02:00     03:00

我想获取第二张表中剩余的可用时间,假设从12:00到01:00的时间是免费的,所以我希望我的查询将选择我需要使用MySQL查询的可用时间,请告诉我做一个查询,因为我不知道我可以使用什么查询来获取可用的时间。非常感谢您的帮助。 谢谢

1 个答案:

答案 0 :(得分:0)

DROP TABLE IF EXISTS `appointment`;
CREATE TABLE  `appointment` (
  `ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `Start` datetime NOT NULL,
  `End` datetime NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into appointment (`Start`,`End`) values ('2019-01-18 09:00:00','2019-01-18 10:00:00'),('2019-01-18 10:00:00','2019-01-18 12:00:00'),('2019-01-18 14:00:00','2019-01-18 15:00:00');

DROP TABLE IF EXISTS `mhc_common`.`schedule`;
CREATE TABLE  `mhc_common`.`schedule` (
  `ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `Time` datetime NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into schedule (`Time`) values ('2019-01-18 09:00:00'),('2019-01-18 10:00:00'),('2019-01-18 11:00:00'),('2019-01-18 12:00:00'),('2019-01-18 13:00:00'),('2019-01-18 14:00:00'),('2019-01-18 15:00:00'),('2019-01-18 16:00:00');

尝试此操作以返回可用时间

Select ID
     , s.Time 
  From Schedule s 
  Left 
  Join
     ( SELECT Time
            , if((`Time` >= `Start` and `Time` < `End`),'N','Y') NA 
         FROM appointment a
            , schedule b 
       Having NA = 'N'
     ) a
    On a.Time = s.Time
 Where `NA` is Null;