Как создать запрос на открытие временных интервалов между забронированными событиями на заданную дату и время? - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь создать запрос для отображения списка открытых временных интервалов на определенный день.Здесь я нашел много похожих вопросов, но ни один из ответов, похоже, не справился с этой задачей.

Упрощенная версия моей таблицы забронированных встреч:

Имя таблицы: app_bookings (до вывода)

CREATE TABLE `app_bookings` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`client_id` INT(11) NOT NULL DEFAULT '0',
`provider_id` INT(11) NOT NULL DEFAULT '0',
`doctor_id` INT(11) NOT NULL DEFAULT '0',
`department_id` INT(11) NOT NULL DEFAULT '0',
`date` DATE NOT NULL,
`StartTime` DATETIME NULL DEFAULT NULL,
`EndTime` DATETIME NULL DEFAULT NULL,
`duration` INT(11) NOT NULL,
`payment` VARCHAR(50) NOT NULL,
`created_by` INT(11) NOT NULL,
`updated_by` INT(11) NOT NULL,
`created_at` DATETIME NOT NULL,
`updated_at` DATETIME NOT NULL,
PRIMARY KEY (`id`)

);

INSERT INTO `app_bookings` ( `client_id`, `provider_id`, `doctor_id`, `department_id`, `date`, `StartTime`, `EndTime`, `duration`, `payment`, `created_by`, `updated_by` ) VALUES
 ( 1, 3, 11, 1, '2018-10-21', '2018-10-21 10:15:00', '2018-10-21 11:00:00', 0, '', 0, 0 ),
 ( 1, 3, 11, 1, '2018-10-21', '2018-10-21 11:15:00', '2018-10-21 13:00:00', 0, '', 0, 0 ),
 ( 1, 3, 11, 1, '2018-10-21', '2018-10-21 14:15:00', '2018-10-21 14:45:00', 0, '', 0, 0 ),
 ( 1, 3, 11, 1, '2018-10-21', '2018-10-21 15:00:00', '2018-10-21 15:45:00', 0, '', 0, 0 ),
 ( 1, 3, 11, 1, '2018-10-21', '2018-10-21 16:00:00', '2018-10-21 16:30:00', 0, '', 0, 0 );

Мой текущий запрос MYSQL : (я извлек это из другого ответа и изменил для моего использования)

SELECT AvailStartTime, AvailEndTime 
FROM (SELECT @lastEndTime as AvailStartTime, StartTime as AvailEndTime, 
             @lastEndTime := EndTime 
      FROM (SELECT StartTime, EndTime 
            FROM app_bookings 
            WHERE doctor_id = 14 
            AND EndTime >= '2018-10-21 10:00' 
            AND StartTime < '2018-10-21 19:00' 
            ORDER BY StartTime
            ) e 
      JOIN (SELECT @lastEndTime := NULL) init) x WHERE 
            AvailEndTime > DATE_ADD(AvailStartTime, INTERVAL 15 MINUTE)

В результате вышеприведенного запроса выводится следующее:

enter image description here

Я получаю правильный вывод, используя этот запрос, но мне нужно пропуститьобеденный перерыв для врача, начало обеда будет @startlunch с «13:00» до «14:00» и получит запись с 2018-10-21 15:30:00 до 2018-10-21 19:00 (пропустите, если забронирован какой-либо вход)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...