Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка интервалов дат на пересечение 
:(
    Опции темы
Gekt0r
Дата 1.2.2010, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 10.4.2008

Репутация: нет
Всего: нет



Всем привет!
Что-то я второй день туплю, надеюсь на помощь...
Задача следующая.

Есть база, из которой надо сделать выборку.
Фишка в том, что запросы в базу будут отличаться, если выборка затрагивает время с 24 декабря по 11 января или остальной период года.
На вход принимаем 2 даты - начальную и конечную, по которым будем запрашивать данные.

Надо проверить тот интервал, который идет на вход.
Я так понимаю, могут быть следующие условия.

Соответственно, если нет пересечений с периодом 24.12 - 11.01, то запрос один.
Если интервал целиком внутри периода, то запрос другой.
Если есть пересечение, то надо разбить на 2 запроса.
Если период 24.12 - 11.01 оказывается целиком внутри заданного интервала, то разбиваем на 3 запроса (начальная дата - 23.12, 24.12 - 11.01, 12.01 - конечная дата)

что-то я у меня не придумывается, как это можно сделать, можете подсказать?
PM MAIL   Вверх
Akina
Дата 1.2.2010, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Поскольку количество ЗАПРОСОВ отличается - задача решается на клиенте, а не на сервере.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Gekt0r
Дата 1.2.2010, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 10.4.2008

Репутация: нет
Всего: нет



Цитата(Akina @ 1.2.2010,  12:45)
Поскольку количество ЗАПРОСОВ отличается - задача решается на клиенте, а не на сервере.

Может, я что-то не так объясняю... Я имел в виду количество запросов в базу данных.
Клиент просто указывает интервал дат. Который потом надо обработать именно на сервере
PM MAIL   Вверх
Akina
Дата 1.2.2010, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Ааа... в таком случае пиши хранимку, которая всё это распарсит и просчитает.




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Gekt0r
Дата 1.2.2010, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 10.4.2008

Репутация: нет
Всего: нет



Цитата(Akina @ 1.2.2010,  14:31)
Ааа... в таком случае пиши хранимку, которая всё это распарсит и просчитает.

что написать, я не понял?
Если б знал, как написать, я бы тут тему не создавал)
PM MAIL   Вверх
Earnest
Дата 1.2.2010, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 7
Всего: 183



Akina имел в виду хранимую процедуру. Про них почитай документацию к своей БД. 


--------------------
...
PM   Вверх
Gekt0r
Дата 1.2.2010, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 10.4.2008

Репутация: нет
Всего: нет



Блин, я же говорю... Если бы я знал, как это написать, то я бы не задавал тут вопроса!
Мне сам алгоритм непонятен.. Особенно момент, когда период оказывается внутри заданного интервала
PM MAIL   Вверх
Akina
Дата 1.2.2010, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(Gekt0r @  1.2.2010,  16:02 Найти цитируемый пост)
Если бы я знал, как это написать, то я бы не задавал тут вопроса!

Я не понял - что тебе неясно? Даны два интервала, найти тип их пересечения... геометрию в школе все проходили - нарисуй. Факт пересечения проверяется просто (конец2-начало1)*(конец1-начало2)<0. Тип пересечения определяется проверкой попадания точки начала/конца одного диапазона внутри другого, при попадании (точка-начало)*(точка-конец)<0. Раз хранимая процедура - не жадничай поначалу на ветвления, всё равно работать будет только одна ветка. Потом займёшься оптимизацией.
А как пишут хранимки в твоём диалекте и как из них возвращать наборы записей - это в доки по своей СУБД.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0817 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.