@del993788

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

Здравствуйте. Я пытаюсь дефрагментировать свою базу данных. Она выглядит вот так: sqlfiddle.com/#!9/9554b . Первая таблица отвечает за отображение номеров в гостинице, которые существуют, вторая - за существующие брони в гостинице. Если её визуализировать, то выглядит эту чудо вот так: 7fa78e7cfcda490284be29ddb2de3a71.PNG
Дефрагментировать - значит расположить брони (выделенное цветом - это брони) так, чтобы они были максимально приближены друг к другу, то есть вот так:
b79c4e0615e543c7a6d0048fa59b817c.PNG
И вот этот код с моей задачей справляется:
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
Почему при смене даты происходит неверная дефрагментация? Подскажите, как исправить?
  • Вопрос задан
  • 230 просмотров
Пригласить эксперта
Ответы на вопрос 1
tsklab
@tsklab
Здесь отвечаю на вопросы.
Почему при другой дате брони дефрагментируются неверно?
Разделите уже день на часы и стройте свой график загрузки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы