[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: выбрать свободный диапазон дат
Страницы: 1, 2
T1grOK
Кто мешает при добавлении тизеров, вычислять "расстояние" до следующего тизера по дате? Вся задача в итоге сведется к поиску по этой величине, вставке нового тизера (с расчитанным "расстоянием" до следующего тизера) в нужное место удовлетворяющее условию, и пересчет "расстояния" для предыдущего тизера. Вариант очень производительный.

Можно по другому пойти используя JOIN, DATE INTERVAL и пересечение двух периодов, но здесь могут возникнуть проблемы с использованием индексов.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Valick
Цитата (zuher @ 8.01.2017 - 16:00)
В чём ебанутость, позвольте уточнить?

Цитата (zuher @ 8.01.2017 - 15:58)
говорю же, запутался совсем в логике уже за неделю.

этого мало?
Цитата (zuher @ 8.01.2017 - 16:00)
если Вы настолько охуенны

да, я такой.

Вы можете описать алгоритм по которому происходит добавление тизеров? К примеру тизер номер раз, имеет продолжительность три дня, соответственно занимет 1, 2, 3 числа, а вот тизер номер два имеет продолжительность два дня. Но теперь вам предстоит обосновать почему он отдуплился ни спервого, ни со второго, а именно с третьего числа и начинает свой показ.

_____________
Стимулятор ~yoomoney - 41001303250491
walerus
zuher
Исходя из картинки, первым освобождается позиция 4, все верно... Я вот не понял почему
Цитата
но видно, что позиции 5,2 и 3 нас более устраивают, например для двухдневного тизера
Это ориентируясь на то, что все позиции в итоге освободятся?

По идее, нужно действовать из принципа первой освободившейся позиции, т.е.:
4,1,2,3,5 - последовательность освобождения позиций, при условии !, что нет заказов "впереди", а их по идее, тоже не должно быть, если только не стоит планировщик заказов типа:
- "хочу показываться в 1й позиции с 10го числа... Если есть планировщик, то это уже совсем другая задача.

Отсюда возникают вопросы:
1) есть ли планировщик ?
2) если нет планировщика, то почему не сделать по простому? - что раньше освободилось, туда и ставить?... или есть какие то условия по позициям(денежные например), из за которых нельзя просто так поставить в первую освободившуюся позицию...?
killer8080
Цитата (zuher @ 8.01.2017 - 17:18)

нарисовал график, чтобы самому понятнее было и вам понятнее

вообще не понятно, по какому принципу эти тизеры расставлены? Почему в разные дни показывается их разное количество? В один день - один, в другой два или три, так и задумано? Если да, то тогда о каком поиске окон идёт речь?
chee
если я правильно понял задачу, то решается она не очень то и сложно.

Берем планируемый тизер, у него например 1 суки, переводим в секунды.
Дальше по каждой позиции ищем свободные окна, как искать окна, хм ну например:

1. Берем все что больше даты с которой нужно планировать (можно также условие вставить до какой даты планировать), выбираем все что больше этой даты
2. Джойним эту же таблицу саму на себя, с правилом сравнения временных отрезков (мне лень расписывать, но такие правила составить не сложно)
3. Все результаты которые получили при сравнении возращем в select в виде даты начала и конца отрезка. Можно подсчитать количество секунд в интервале, having убрать то что не подходить по продолжительности.
4. Получить отрезки свободных дат, выбрать нужный, создать тизер.

Короче я не вижу тут ничего такого сложного. Есть нюансы в реализации, которые я уже вижу, но они не критичны, их тоже легко решаются.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Valick
Цитата (chee @ 8.01.2017 - 22:00)
1. Берем все что больше даты с которой нужно планировать (можно также условие вставить до какой даты планировать), выбираем все что больше этой даты
2. Джойним эту же таблицу саму на себя, с правилом сравнения временных отрезков (мне лень расписывать, но такие правила составить не сложно)
3. Все результаты которые получили при сравнении возращем в select в виде даты начала и конца отрезка. Можно подсчитать количество секунд в интервале, having убрать то что не подходить по продолжительности.
4. Получить отрезки свободных дат, выбрать нужный, создать тизер.


это пиздец...

пора мне делать ноги из этой темы, уже два матерных слова, год только начался, а я уже почти весь свой годовой лимит исчерпал


_____________
Стимулятор ~yoomoney - 41001303250491
chee
Valick, что не так? Даже заинтриговал.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Valick
Цитата (chee @ 8.01.2017 - 22:15)
Valick, что не так? Даже заинтриговал.

Цитата (chee @ 8.01.2017 - 22:15)
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
chee
Valick, ну ты же понимаешь, что сейчас ты выглядишь как идиот, который написал два раза "пиздец" в это теме, без всякой конкретики.

Я не отрекаюсь от своей подписи и потому спрашиваю у тебя в чём дело, что не так в моих суждениях. Если там действительно все плохо, я готов признать, что предложил действительно ошибочное решение. Покажи что ты человек с высоким уровнем квалификации.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
walerus
chee
оффтоп
у Valick`а год не задался laugh.gif
Чет ТС пропал...

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.