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

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

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

Вы не зашли.

#1 04.04.2012 10:02:55

userbanderas
Участник
Зарегистрирован: 14.10.2011
Сообщений: 12

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

Здравствуйте!

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

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-го, тогда сделать то-то.

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

Отредактированно userbanderas (04.04.2012 13:07:18)

Неактивен

 

#2 04.04.2012 13:13:54

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

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

Здравствуйте.

Честно говоря, лучше такое делать на клиентской стороне. Путем страшного костыля возможно получится и на стороне mysql, но не факт.  Покажите пожалуйста show create table на Вашу таблицу. И поясните - что значит "сделать то-то". Это означает выполнитть какой-то запрос или?..


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 04.04.2012 13:23:06

userbanderas
Участник
Зарегистрирован: 14.10.2011
Сообщений: 12

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

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

Неактивен

 

#4 04.04.2012 13:35:33

userbanderas
Участник
Зарегистрирован: 14.10.2011
Сообщений: 12

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

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

Неактивен

 

#5 04.04.2012 14:26:51

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

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

Приведите все же структуру таблицы в форме create table t.

Между первой и второй квотой промежуток 0 дней, между второй и третьей 4 дня.
В чем именно состоит задача - получить информацию о том, есть ли промежутки между квотами?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#6 04.04.2012 14:44:53

userbanderas
Участник
Зарегистрирован: 14.10.2011
Сообщений: 12

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

Всё верно, нужно проверить есть ли промежутки между квотами!

Неактивен

 

#7 04.04.2012 14:45:28

userbanderas
Участник
Зарегистрирован: 14.10.2011
Сообщений: 12

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

-- phpMyAdmin SQL Dump
-- version 3.2.3
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Апр 04 2012 г., 14:42
-- Версия сервера: 5.1.40
-- Версия PHP: 5.2.12

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- База данных: `reservation`
--

-- --------------------------------------------------------

--
-- Структура таблицы `price_season`
--

CREATE TABLE IF NOT EXISTS `price_season` (
  `id` int(4) unsigned NOT NULL AUTO_INCREMENT,
  `id_hotel_number` int(6) NOT NULL,
  `begin_season` date NOT NULL,
  `end_season` date NOT NULL,
  `price` int(6) NOT NULL,
  `quotaNumber` int(3) NOT NULL,
  `del` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=23 ;

Неактивен

 

#8 04.04.2012 15:39:49

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

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

Уже понятней. В-общем, тут я вижу два варианта:

1) Определенная денормализация - то есть добавить колонку с названием, допустим, diff_days типа int в таблицу price_season, которая будет хранить количество дней между интервалами (для первой записи будет NULL).

квота1 с 10-04-2012 по 15-04-2012 (т.е. бронь разрешается в этом периоде), NULL
квота2 с 16-04-2012 по 20-04-2012 (т.е. бронь разрешается в этом периоде), 1
квота3 с 25-04-2012 по 30-04-2012 (т.е. бронь разрешается в этом периоде), 5

Тогда в нужных случаях просто делается SELECT max(diff_days) from price_season WHERE begin_season>='...' AND end_season<='...'.

Это создаст определенные сложности при заполнении и изменении данных в этой таблице, но искать будет проще.

2). На клиенте (не знаю, на чем написан Ваш сайт, допустим на php):
Делаете запрос SELECT * FROM price_season WHERE begin_season>='...' AND end_season<='...' order by begin_season

Цикл по всем полученным записями, и начиная со второго элемента:
Отнимаете от даты begin_season i-го элемента end_season i-1-го элемента (http://php.net/manual/ru/book.datetime.php).
Ну и если нашёлся интервал, который больше чем 1 день  - то значит есть такие.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

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