Помогите составить алгоритм загрузки

letsgo

Новичок
Помогите составить алгоритм загрузки

Коллеги, прошу помощи в составлении алгоритма (последовательности действий) решения следующей задачи.

Существует таблица, в которой хранятся данные по ценам отелей на различные периоды.

PHP:
idprice - Порядковый, auto increment
idhotel - Идентификатор, который берется из другой таблицы
date_price - Дата загрузки данной строки
from_date - Дата начала действия данного прайса (UNIX-формат)
to_date - Дата окончания действия данного прайса (UNIX-формат)
price - Стоимость проживания в сутки
Иногда, на эти отели приходят, так называемые, спецпредложения в формате XLS, которые необходимо загружать в эту таблицу.
Может будет проще, если приведу пример. Итак, возьмем отель с ID=5, для него имеются 5 записей в таблице:
PHP:
01.06.2010; 25.06.2010; 0; 50
26.06.2010; 06.07.2010; 12.06.2010;  40
07.07.2010; 28.07.2010; 28.06.2010;  46
29.07.2010; 01.09.2010; 0;  54
02.09.2010; 08.09.2010; 0;  55
Т.е. в кратце, отель с ID=5 имеет 5 периодов заездов, с 01.06.2010 по 25.06.2010 цена проживания 50 в сутки, с 07.07.2010 по 28.07.2010 46 в сутки и т.д., причём период с 07.07.2010 по 28.07.2010 является, так называемым "спецпредложением", так как значение 3 столбца не равняется нулю.

Теперь возвращаемся к задаче. Я уже говорил, что иногда приходят файлы новых спецпредложений, которые требуется загружать в эту таблицу. Привожу пример:

PHP:
26.06.2010; 06.07.2010; 15.06.2010;  35
10.07.2010; 15.07.2010; 25.06.2010;  46
04.09.2010; 06.09.2010; 25.06.2010; 51
Т.е. у нас есть три строки, которые нужно загрузить или не загрузить в нашу таблицу. Новая таблица цен для отеля с ID=5 после загрузки данного файла должна выглядеть следующим образом.

PHP:
01.06.2010; 25.06.2010; 0; 50
26.06.2010; 06.07.2010; 15.06.2010;  35
07.07.2010; 28.07.2010; 28.06.2010;  46
29.07.2010; 01.09.2010; 0;  54
02.09.2010; 03.09.2010; 0;  55
04.09.2010; 06.09.2010; 25.06.2010; 51
07.09.2010; 08.09.2010; 0;  55
Принцип изменения цен:
1. Строка может изменяться на новую только в том случае, если новая дата спецпредложения больше имеющейся даты спецпредложения.
Например, если в базе хранится период с 07.07.2010 по 28.07.2010, а дата его спецпредложения 28.06.2010, мы не можем изменять этот период, если приходит новое спецпредложение
на период с 10.07.2010 по 15.07.2010 с датой спецпредложения 25.06.2010
2. В базе не должно быть пересекающихся дат, т.е. периоды с 01.06.2010 - 10.06.2010 и 08.06.2010 - 15.06.2010 - это очень большой косяк. Такого быть не должно.
Если в базе хранится период с 02.09.2010 по 08.09.2010 и приходит SPO с датами с 04.09.2010 по 06.09.2010, то в общем случае получается три новых периоды, это:
02.09.2010 - 03.09.2010, 04.09.2010 - 06.09.2010, 07.09.2010 - 08.09.2010
 

prolis

Новичок
[sql]
select * from table where startDate=<to_date and endDate>=from_date and ifnull(actDate,curdate())>ifnull('3 столбец',curdate())
[/sql]
Второй вопрос аналогично последовательно с каждым вхождением диапазона разбираемся в скрипте
 
Сверху