Задавайте вопросы, мы ответим
Вы не зашли.
Есть таблица в ней содержится информация о том когда, кем и на какое время могут быть поданы заявки.
create table working_type
( id int,
Time DayBegin,
Time DayEnd,
Time Discrete,
Date FirstDay,
Date LastDay,
Date PropagationPeriod);
DayBegin\DayEnd - начало конец рабочего дня
FirstDay\LastDay - первый-последний день работы.
PropagationPeriod - иремя повторения, т.е. если установлен в 1, значит каждый день, если в 2, то через день и т.д. начиная с FirstDay
Discrete - период с которым могут быто поданы заявки, если устнановлено в 15:00 - значит каждые 15 минут.
Есть еще одна таблица
create table Tickets(
Date Day,
Time Duration,
Time Begin
);
Day - день на который продан билет
Begin - время начала
Duration - длительность сеанса
Вот в чем вопрос. Требуется выбрать все доступные билеты (т.е. все доступные временный интервалы) из таблицы working_type. Причем имеется ввиду, что если указано время начала- 10:00:00, время окончания работы - 11:00:00, Discrete - 00:15:00, То должны выбраться 10:00,10:15,10:30,10:45. (4 строки в результате, а не одна!!!) Если какой-то из этих временных интервалов пересекается с записями в таблице Tickets, от он должен быть исключен из результата.
Таки возможно ли это сделать средствами SQL. Желательно не прибегать к триггерам. Если без них никак, то ничего не поделаешь.
Могу кончено сделать выборку свободных на более высоком уровне, но хотелось бы все же по красивше сделать.
Либо хоть подскажите, куда смотреть.
Заранее благодарен.
Неактивен
Боюсь, что на такой структуре это можно сделать (если средствами MySQL) то только
хранимой процедурой. Гораздо проще, наверное, будет это сделать на каком-нибудь
языке программирования.
Если хочется простой возможности выборки - можно попробовать сделать таблицу "свободных
билетов" - т.е. что-то типа Tickets (ts TIMESTAMP, is_free BIT DEFAULT 1) - тогда Вы сможете
выбирать билеты просто по флагу.
Разумеется, этот подход будет требовать некоторых ночных действий типа "заведение
завтрашних пустых билетов", но выборки будут проще
Неактивен
Это понятно. Но не ясно на сколько времени заводить билеты. На день, на месяц, на год....
Неактивен
Как вариант - заводить налету. Т.е. генерировать билеты на весь день, если они еще
не сгенерированы, в момент первого обращения к ним (тот запрос, который Вам нужен,
или запрос-залочивание билета).
В любом случае, в программу какую-то осмысленность добавить прийдется
Неактивен