首页 > 解决方案 > 想要从餐桌上获得可用的预订时间

问题描述

我有 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 查询,请告诉我一个查询这样做是因为我不知道我可以使用什么查询来获取可用的时间。您的帮助将不胜感激。谢谢

标签: mysql

解决方案


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;

推荐阅读