Почему при другой дате брони дефрагментируются неверно?

drkrol

Постоялец
Регистрация
6 Мар 2016
Сообщения
112
Реакции
11
Здравствуйте. Я пытаюсь дефрагментировать свою базу данных. Она выглядит вот так: Для просмотра ссылки Войди или Зарегистрируйся . Первая таблица отвечает за отображение номеров в гостинице, которые существуют, вторая - за существующие брони в гостинице. Если её визуализировать, то выглядит эту чудо вот так:

7fa78e7cfcda490284be29ddb2de3a71.PNG


Дефрагментировать - значит расположить брони (выделенное цветом - это брони) так, чтобы они были максимально приближены друг к другу, то есть вот так:
b79c4e0615e543c7a6d0048fa59b817c.PNG

И вот этот код с моей задачей справляется:
PHP:
set @today:=date('2016-12-11');
update main M
  join (
   select cid, nomer
     from (
       select A.nomer,
              @cstart:=if(@cnum=A.nomer,@cstart,A.start),
              @cnum:=A.nomer,
              @cid:=(select M.id
                       from main M,allnomer MT
                      where MT.nomer=M.numbernomer and MT.type='lux'
                        and M.datestart>@cstart
                        and find_in_set(M.id,@used)=0
                      order by datestart
                      limit 1
                    ) cid,
              @cstart:=(select dateend from main where id=@cid) dend,
              @used:=coalesce(concat(@used,',',@cid),@used)
         from (
          select A.nomer, A.start
            from (
              select A.nomer,
                     (select coalesce(min(dateend),@today-interval 1 day)
                        from main M
                       where datestart<=@today and M.numbernomer=A.nomer) start
                from allnomer A where type='lux'
            ) A,
            main M, allnomer MT
           where MT.nomer=M.numbernomer and MT.type='lux' and M.datestart>A.start
           order by A.start desc, A.nomer
         ) A,
         (select @cid:=0,@cnum:=0,@cstart:=NULL,@used:='') Y
     ) X where cid is not null
  ) U
  on M.id=U.cid
set M.numbernomer=U.nomer


Но если изменить set @today:=date('2016-12-11'); на set @today:=date('2016-12-05'); , то база данных будет выглядеть вот так:
b0b5058220954bfab8d96167b1f401b7.PNG

Почему при смене даты происходит неверная дефрагментация? Подскажите, как исправить?
 
Назад
Сверху