дата по порядку или нет?

Userbanderas

Новичок
Здравствуйте!

Не получается решить следующую задачу! Из БД извлекаются несколько строк с календарными периодами. Например:

1 строка) с 01.04.2012 по 10.04.2012
2 строка) с 11.04.2012 по 20.04.2012
3 строка) с 25.04.2012 по 30.04.2012

Нужно посчитать количество дней между конечной датой 1 строки и начальной датой 2 строки, конечной датой 2 строки и начальной датой 3 строки. И если не в одном промежутке дат кол-во дней не превышает 1-го, тогда сделать то-то.

Я не могу понять, каким способом это можно реализовать.
 

Beavis

Banned
календарные периоды хранить как 2 поля типа DATE и использовать DATE_DIFF
 

Userbanderas

Новичок
календарные периоды хранить как 2 поля типа DATE и использовать DATE_DIFF
DATEDIFF я думал использовать, но это не то, что нужно - если я конечно его правильно применил(
PHP:
SELECT DATEDIFF( `end_season` , `begin_season` )
FROM price_season
WHERE id_hotel_number = '103'
)
Фактически мне нужно проверить, существует ли разрыв между периодами(строками1,2 и 3).

А с помощью DATEDIFF мне выводится разрыв в самом периоде, т.е. например: в 1-ой строке) с 01-04-2012 по 10-04-2012!
 

Userbanderas

Новичок
Поясню задачу, для более объёмного восприятия!
Администратор сайта создаёт категорию номера гостиницы, в которой устанавливает квоту для разрешения бронирования.Квот может быть несколько! Например:
категория номера: Люкс
квота1 с 10-04-2012 по 15-04-2012 (т.е. бронь разрешается в этом периоде)
квота2 с 16-04-2012 по 20-04-2012 (т.е. бронь разрешается в этом периоде)
квота3 с 25-04-2012 по 30-04-2012 (т.е. бронь разрешается в этом периоде)
Собственно между этими квотами может существовать разрыв дат(например: между квота2 и квота3), который говорит нам что бронирование запрещено в этом разрыве дат.
Я описал это в надежде на то, что возможно найдется другой способ решения этой задачи!
Спасибо заранее!
 

Userbanderas

Новичок
Т.е. для бронирования, посетитель выбирает дату заезда и отъезда. Если между этими датами попадает разрыв между периодами, которые находятся в БД, то категорию номера не отображать!
 

Beavis

Banned
загрузи все периоды в php, и в цикле перебери
написать условие, проверяющее, является ли дата следующим днём для заданного, не проблема
 

Userbanderas

Новичок
Можете мне помочь с написанием условия? Я не очень то представляю как оно будет выглядеть!
Например уже существует массив с извлечёнными данными (
PHP:
$myrow = mysql_fetch_array(3_квоты)
)
 

zerkms

TDD infected
Команда форума
Т.е. для бронирования, посетитель выбирает дату заезда и отъезда. Если между этими датами попадает разрыв между периодами, которые находятся в БД, то категорию номера не отображать!
И в чём сложность? Начало выбранного интервала >= начала интервала в базе AND конец выбранного интервала <= конца интервала в базе
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Можете мне помочь с написанием условия? Я не очень то представляю как оно будет выглядеть!
Значит следует нанять программиста.
 

Userbanderas

Новичок
И в чём сложность? Начало выбранного интервала >= начала интервала в базе AND конец выбранного интервала <= конца интервала в базе
Видимо Вы не до конца меня поняли. Составить запрос выборки не проблема. Проблема вычислить существует ли разрыв дат между квота 1 - квота 2 и квота 2 - квота 3.
 

Beavis

Banned
И в чём сложность? Начало выбранного интервала >= начала интервала в базе AND конец выбранного интервала <= конца интервала в базе
в базе может быть несколько интервалов без разрыва

поэтому лучше загрузить все данные в пхп, и обрабатывать в нём

Можете мне помочь с написанием условия? Я не очень то представляю как оно будет выглядеть!
Например уже существует массив с извлечёнными данными (
PHP:
$myrow = mysql_fetch_array(3_квоты)
)
выбираешь все периоды из базы, которые пересекаются с датами, введенными пользователем
если между перерывов есть хоть один разрыв, значит бронирование невозможно

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

Userbanderas

Новичок
в базе может быть несколько интервалов без разрыва

поэтому лучше загрузить все данные в пхп, и обрабатывать в нём



выбираешь все периоды из базы, которые пересекаются с датами, введенными пользователем
если между перерывов есть хоть один разрыв, значит бронирование невозможно

чтобы проверить, есть ли разрыв между периодами, проходишься в цикле по всем периодам и, начиная со второго, сравниваешь первую дату периода с последней датой предыдущего (с учетом разницы в 1 день)
хотя вообще в бронировании гостиниц логично когда в описании периодов последний день периода совпадает с первым днем следующего, т.к. гости выселяются из гостиницы, и сразу же заезжают следующие (в один день)
Спасибо за замечание!
И за помощь!
 

Userbanderas

Новичок
Beavis, а Вы могли бы продемонстрировать, как будет код выглядеть в данном случае?
 
Сверху