Фильтрация SQL на основе рассчитанных временных интервалов - PullRequest
2 голосов
/ 14 марта 2012

Я делаю простую систему бронирования для наших проекторов на работе.

Вот сценарий.Каждый проектор может иметь доступность сегментов по четверти часа в течение всего дня.т.е. проектор 1 доступен с 8:15 до 13:45 и с 15:00 до 17:15 каждый день (также можно изменить, чтобы установить разные возможности для каждого дня).Проектор можно забронировать на любой отрезок времени в течение дня, пока он доступен.Итак, я получил эту настройку в моей базе данных sql (с моим внешним интерфейсом asp.net mvc).

У меня вопрос, каков наилучший способ поиска в этом сценарии.то есть пользователь А приходит и говорит, что найди мне проекторы, которые будут доступны в эту пятницу с 12 до 15Я изо всех сил пытаюсь написать эффективный SQL-запрос, который отфильтрует это.Мой лучший вариант на данный момент - отозвать все проекторы и затем программно решить, если они доступны и не забронированы в это время.Это работает, но невероятно неэффективно.Я наткнулся на идею использования временной таблицы, сгенерированной хранимым процессом, который может быть отфильтрован, но его там нет.

У кого-нибудь есть идеи, как я могу подойти к этому?

Спасибо взаранее

1 Ответ

1 голос
/ 14 марта 2012

Возможно, у меня есть таблица с названием ProjectorReservations, в которой указаны время начала и время окончания (среди прочих полей, которые могут вас заинтересовать, например, кто арендует проектор).

Поиск проектора будет выглядеть примерно так:

SELECT projectorName
FROM Projectors
WHERE NOT EXISTS 
   (SELECT 1 FROM ProjectorReservations
   WHERE Projectors.projectorName = ProjectorReservations.projectorName
   AND (ProjectorReservations.startTime < {end_time}
   OR ProjectorReservations.endTime > {start_time}))

Это в значительной степени проверяет, чтобы убедиться, что никакие резервирования не начинаются до того, как тот, который вы ищете, заканчивается и наоборот. Очевидно, вам нужно будет соответственно поменять поля, но это должно дать вам общее представление

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