У меня есть структура планирования на две таблицы для хранения доступных слотов по дням и сессиям.
Слот определяется диапазоном времени дня.
CREATE TABLE slot (
`id` int(11) NOT NULL AUTO_INCREMENT
, `date` date
, `start` time
, `end` time
);
Сессии не могут накладываться друг на друга и должны быть помещены в слот.
CREATE TABLE session (
`id` int(11) NOT NULL AUTO_INCREMENT
, `date` date
, `start` time
, `end` time
);
Мне нужно сгенерировать список доступных блоков времени определенной продолжительности, чтобы создавать сеансы.
Пример:
INSERT INTO slot
(date, start, end)
VALUES
("2010-01-01", "10:00", "19:00")
, ("2010-01-02", "10:00", "15:00")
, ("2010-01-02", "16:00", "20:30")
;
INSERT INTO slot
(date, start, end)
VALUES
("2010-01-01", "10:00", "19:00")
, ("2010-01-02", "10:00", "15:00")
, ("2010-01-02", "16:00", "20:30")
;
2010-01-01
<##><####> <- Sessions
------------------------------------ <- Slots
10 11 12 13 14 15 16 17 18 19 20
2010-01-02
<##########> <########> <- Sessions
-------------------- ------------------ <- Slots
10 11 12 13 14 15 16 17 18 19 20
Мне нужно знать, какие промежутки 1 часа я могу использовать:
+------------+-------+-------+
| date | start | end |
+------------+-------+-------+
| 2010-01-01 | 13:00 | 14:00 |
| 2010-01-01 | 14:00 | 15:00 |
| 2010-01-01 | 15:00 | 16:00 |
| 2010-01-01 | 16:00 | 17:00 |
| 2010-01-01 | 17:00 | 18:00 |
| 2010-01-01 | 18:00 | 19:00 |
| 2010-01-02 | 10:00 | 11:00 |
| 2010-01-02 | 11:00 | 12:00 |
| 2010-01-02 | 16:00 | 17:00 |
+------------+-------+-------+