Кто мешает при добавлении тизеров, вычислять "расстояние" до следующего тизера по дате? Вся задача в итоге сведется к поиску по этой величине, вставке нового тизера (с расчитанным "расстоянием" до следующего тизера) в нужное место удовлетворяющее условию, и пересчет "расстояния" для предыдущего тизера. Вариант очень производительный.
Можно по другому пойти используя JOIN, DATE INTERVAL и пересечение двух периодов, но здесь могут возникнуть проблемы с использованием индексов.
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Цитата (zuher @ 8.01.2017 - 16:00) |
В чём ебанутость, позвольте уточнить? |
Цитата (zuher @ 8.01.2017 - 15:58) |
говорю же, запутался совсем в логике уже за неделю. |
этого мало?
Цитата (zuher @ 8.01.2017 - 16:00) |
если Вы настолько охуенны |
да, я такой.
Вы можете описать алгоритм по которому происходит добавление тизеров? К примеру тизер номер раз, имеет продолжительность три дня, соответственно занимет 1, 2, 3 числа, а вот тизер номер два имеет продолжительность два дня. Но теперь вам предстоит обосновать почему он отдуплился ни спервого, ни со второго, а именно с третьего числа и начинает свой показ.
_____________
Стимулятор ~yoomoney - 41001303250491
walerus
8.01.2017 - 18:44
zuher
Исходя из картинки, первым освобождается позиция 4, все верно... Я вот не понял почему
Цитата |
но видно, что позиции 5,2 и 3 нас более устраивают, например для двухдневного тизера |
Это ориентируясь на то, что все позиции в итоге освободятся?
По идее, нужно действовать из принципа первой освободившейся позиции, т.е.:
4,1,2,3,5 - последовательность освобождения позиций, при условии !, что нет заказов "впереди", а их по идее, тоже не должно быть, если только не стоит планировщик заказов типа:
- "хочу показываться в 1й позиции с 10го числа... Если есть планировщик, то это уже совсем другая задача.
Отсюда возникают вопросы:
1) есть ли планировщик ?
2) если нет планировщика, то почему не сделать по простому? - что раньше освободилось, туда и ставить?... или есть какие то условия по позициям(денежные например), из за которых нельзя просто так поставить в первую освободившуюся позицию...?
killer8080
8.01.2017 - 22:07
Цитата (zuher @ 8.01.2017 - 17:18) |
нарисовал график, чтобы самому понятнее было и вам понятнее |
вообще не понятно, по какому принципу эти тизеры расставлены? Почему в разные дни показывается их разное количество? В один день - один, в другой два или три, так и задумано? Если да, то тогда о каком поиске окон идёт речь?
если я правильно понял задачу, то решается она не очень то и сложно.
Берем планируемый тизер, у него например 1 суки, переводим в секунды.
Дальше по каждой позиции ищем свободные окна, как искать окна, хм ну например:
1. Берем все что больше даты с которой нужно планировать (можно также условие вставить до какой даты планировать), выбираем все что больше этой даты
2. Джойним эту же таблицу саму на себя, с правилом сравнения временных отрезков (мне лень расписывать, но такие правила составить не сложно)
3. Все результаты которые получили при сравнении возращем в select в виде даты начала и конца отрезка. Можно подсчитать количество секунд в интервале, having убрать то что не подходить по продолжительности.
4. Получить отрезки свободных дат, выбрать нужный, создать тизер.
Короче я не вижу тут ничего такого сложного. Есть нюансы в реализации, которые я уже вижу, но они не критичны, их тоже легко решаются.
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Цитата (chee @ 8.01.2017 - 22:00) |
1. Берем все что больше даты с которой нужно планировать (можно также условие вставить до какой даты планировать), выбираем все что больше этой даты 2. Джойним эту же таблицу саму на себя, с правилом сравнения временных отрезков (мне лень расписывать, но такие правила составить не сложно) 3. Все результаты которые получили при сравнении возращем в select в виде даты начала и конца отрезка. Можно подсчитать количество секунд в интервале, having убрать то что не подходить по продолжительности. 4. Получить отрезки свободных дат, выбрать нужный, создать тизер. |
это пиздец...
пора мне делать ноги из этой темы, уже два матерных слова, год только начался, а я уже почти весь свой годовой лимит исчерпал
_____________
Стимулятор ~yoomoney - 41001303250491
Valick, что не так? Даже заинтриговал.
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Цитата (chee @ 8.01.2017 - 22:15) |
Valick, что не так? Даже заинтриговал. |
Цитата (chee @ 8.01.2017 - 22:15) |
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации |
Valick, ну ты же понимаешь, что сейчас ты выглядишь как идиот, который написал два раза "пиздец" в это теме, без всякой конкретики.
Я не отрекаюсь от своей подписи и потому спрашиваю у тебя в чём дело, что не так в моих суждениях. Если там действительно все плохо, я готов признать, что предложил действительно ошибочное решение. Покажи что ты человек с высоким уровнем квалификации.
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
walerus
9.01.2017 - 06:33
cheeу
Valick`а год не задался
Чет ТС пропал...
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.