Как проверить интервалы времени запросом к таблице?
Всем привет! Имеется такой массив временных интервалов.
array:12 [
0 => "09:30"
1 => "10:10"
2 => "10:50"
3 => "11:30"
4 => "12:10"
5 => "12:50"
6 => "13:30"
7 => "14:10"
8 => "14:50"
9 => "15:30"
10 => "16:10"
11 => "16:50"
]
И имеется такой пример записи.
+----+------------+-------------+-------------+--------+------------+----------+------------+
| id | service_id | employee_id | id_customer | notes | start_time | end_time | date |
+----+------------+-------------+-------------+--------+------------+----------+------------+
| 1 | 1 | 1 | 5 | String | 12:00:00 | 12:40:00 | 2020-12-31 |
+----+------------+-------------+-------------+--------+------------+----------+------------+
1 row in set (0.00 sec)
И нужно сделать запрос, который будет проверять все интервалы из массива с записями из таблицы по полям start_time и end_time. Интервалы, которые в таблицы уже как-бы заняты и нужно вывести лишь те, которые свободны, то есть в данном примере интервал из массива 12:10 будет занят и результатом будут все интервалы, кроме этого интервала. Возможен ли такой запрос?
Или придется сначала вывести все записи из таблицы и сравнивать их с каждым интервалом из массива? То есть этот вариант на уровне php будет, а хотелось бы на уровне mysql. Ведь записей из таблицы может быть много, что очень будет плохо.
Можно ли такой запрос сделать?
То есть нужно как-бы сделать так, чтобы mysql возвращал список свободных интервалом, а так же, чтоб он их проверял с записями из таблицы. Возможно ли такое?
Ответы (1 шт):
Привет
Если не хочешь делать проверку диапазонов на стороне php, или создавать новую таблицу в БД, то попробуй оформить вложенный запрос, например:
select unnest(array[
'09:30',
'10:10',
'10:50',
'11:30',
'12:10',
'12:50',
'13:30',
'14:10',
'14:50',
'15:30',
'16:10',
'16:50'
]) as period
Далее сделай LEFT JOIN своей таблицы и развлекайся.