SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 17.10.2008 15:37:59

vlad8016
Участник
Зарегистрирован: 17.10.2008
Сообщений: 2

ПОмогите составить запрос. выборка-генерация

Есть таблица в ней содержится информация о том когда, кем и на какое время могут быть поданы заявки.
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. Желательно не прибегать к триггерам. Если без них никак, то ничего не поделаешь.
Могу кончено сделать выборку свободных на более высоком уровне, но хотелось бы все же по красивше сделать.

Либо хоть подскажите, куда смотреть.
Заранее благодарен.

Неактивен

 

#2 17.10.2008 16:37:40

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: ПОмогите составить запрос. выборка-генерация

Боюсь, что на такой структуре это можно сделать (если средствами MySQL) то только
хранимой процедурой. Гораздо проще, наверное, будет это сделать на каком-нибудь
языке программирования.

Если хочется простой возможности выборки - можно попробовать сделать таблицу "свободных
билетов" - т.е. что-то типа Tickets (ts TIMESTAMP, is_free BIT DEFAULT 1) - тогда Вы сможете
выбирать билеты просто по флагу.

Разумеется, этот подход будет требовать некоторых ночных действий типа "заведение
завтрашних пустых билетов", но выборки будут проще smile

Неактивен

 

#3 17.10.2008 16:39:09

vlad8016
Участник
Зарегистрирован: 17.10.2008
Сообщений: 2

Re: ПОмогите составить запрос. выборка-генерация

Это понятно. Но не ясно на сколько времени заводить билеты. На день, на месяц, на год....

Неактивен

 

#4 17.10.2008 17:42:27

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: ПОмогите составить запрос. выборка-генерация

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

В любом случае, в программу какую-то осмысленность добавить прийдется smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson