Здравствуйте. Имеется база данных с датами бронирования номеров в гостинице. Вот примерная структура такой базы:
sqlfiddle.com/#!9/9554b . Нужно написать mysql функцию, которая будет дефрагментировать эти данные, т.е. перераспределять их. К заказу я прикрепил 2 изображения, иллюстрирующие текущую базу данных, и то, что нужно мне в итоге получить.
Более подробно.
У нас есть несколько номеров одного и того же типа, к примеру "люкс", "эконом", "стандарт". Остановимся на "люкс". Он включает в себя 4 номера (301,302,303,304). Если появляется новая бронь на даты, то моя функция выдачи номеров работает так: проверяет, свободен ли номер 301 на эти даты, и если на эти даты номер занят, то он переключается на 302 и так же проверяет номер на эти даты. И так будет до тех пор, пока он не найдёт свободный номер нужного типа. Если у нас появится бронь с 12 по 20 число, то моя функция вернёт flase, т.к., по сути, нет ни одного свободного номера на эти даты, хотя на рис.1 можно видеть, что на даты с 12 по 20 число свободны. Где-то свободен 301 номер, где-то 302, но полностью свободного номера на эти даты нет. Если же перераспределить забронированные номера на эти даты, тогда номер 302 освободится (см. рис. 2). Вот мне нужно такой дефрагментатор, который будет перераспределять брони.
Небольшой аспект.
Дефрагминтироваться должны только те даты, которые не касаются броней на сегодняшнюю дату. Если, к примеру, сегодня 10 декабря, то брони на числа 10-11, 10-12, 10-14 и 10-13 перемещать нельзя, т.к. я не могу переселить уже живущих постояльцев в другой номер.