Задавайте вопросы, мы ответим
Вы не зашли.
Привет форумчанам!
Есть проблема. Для начала опишу идею.
Задание - сделать калькуляцию стоимости тура (отдых) с определенной даты по определенную дату.
База:
id - INT(11) - autoinc
date_from - date (00-00-0000)
date_to - date (00-00-0000)
parice - vchar 5 NOT NULL
hotel_id - vchar 5 NOT NULL
Сложность - даты в записях могут пересекаться, нужно посчитать стоимость тура за дни, при этом с каждого пересечения нужно выбрать меньшую стоимость для отеля с id 1.
Пример текстовый (для более наглядного примера смотрим прикрепленный файл):
id date from date to Price Hotel_id
1 22-04-2010 26-04-2010 100 1
2 27-04-2010 02-05-2010 200 1
3 24-04-2010 28-04-2010 150 1
То есть в итоге нужно вытащить ответ с, например, 23-04-2010 по 01-05-2010 одной строкой по следующему принципу:
Смотрим в каких периодах на этот день меньшая цена и прибавляем меньшую. В тоге должен получится ответ 1300
Огромное спасибо за помощь!
ЗЫ: добавляю: может быть о одна запись в базе по текущему отелю, то есть в током случае просто просуммировать стоимость каждого дня. Может быть 2,4 и тд. Спасибо! Если кто с Киева поможет, то с меня пиво!
Отредактированно extsps (13.05.2010 15:35:56)
Неактивен
Сделал, помогли. Кому надо может:
CREATE PROCEDURE `procedure1`(IN hotel_ident INT, IN date_in DATE, IN date_off DATE)
BEGIN
DECLARE s_date DATE;
SET s_date = date_in;
drop temporary table if exists `days`;
create temporary table `days`(`day` date not null,PRIMARY KEY (`day`)) ENGINE=MEMORY;
WHILE s_date <= date_off DO
INSERT INTO days (`day`) VALUES (s_date);
SET s_date=DATE_ADD(s_date, INTERVAL 1 DAY);
END WHILE;
select sum(price) as total from (select (select min(price) from prices where prices.date_from <=`days`.`day` and prices.date_to>=`days`.`day`) as price from `days`) subtable;
END;
Неактивен