[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: выбрать свободный диапазон дат
Страницы: 1, 2
zuher
Здравствуйте, не хватает своих знаний php. Нужна функция, может кто то уже писал что то подобное.

Есть пять позиций тизеров с анонсами статей, которые показываются на сайте. У каждой позиции есть три варианта показов, сутки, двое, трое. При добавлении нового тизера надо найти свободное время показа, среди уже размещённых, или выбрать более позднее время, если все места заняты.
Например:
тизер1 = показываем двое суток
тизер2= показываем трое суток
тизер3=показываем сутки
тизер4=показываем трое суток
тизер5=показываем трое суток

Добавляем тизер с показом двое суток
Значит можно добавить следующий тизер в позицию 1 через два дня или в позицию 3 через день, позиция 3 освобождается раньше, значит добавляем туда

Все анонсы имеют в БД поля topstart(datetime),topend(datetime),promotop(flag(0,1))

Готов отблагодарить в разумных пределах
Kusss
а есть запрос на выбор в пределах одного дня ?
WHERE 
/*
$start - выбранная дата , или просто NOW() для текущей
Выбираем все в пределах 2 дней
*/

`topstart` <= '$start' AND
`topend` >= ( '$start', INTERVAL 2 DAY )
zuher
у меня загвоздка именно в логике поиска, в голове не сходится.
т.е. я не могу выбрать именно свободный диапазон
чтобы получить $start мне надо учесть освобождающиеся позиции с учётом выбранной
т.е. проблема именно найти ближайший свободный диапазон, чтобы уже потом от него плясать

наверное неправильно объясняю, если честно, сам уже запутался

к скрипту поиска места мы приходим с конкретным "пожеланием" - день, два или три

Но потом надо выбрать с учётом пяти позиций. Найти какая освобождается в ближайшее время.
например
select where 'topend'>=NOW() order by 'topend' limit 1 desc

я получу ближайшую свободную дату, но она может пересечься с тизером который активен, например, на следующий день и попасть в окно размером в сутки - двухдневным тизером
....
всё
запутался сам в конец)))
T1grOK
SELECT topend FROM ... WHERE topend >= NOW() ORDER BY topend DESC LIMIT 1


_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
T1grOK
Цитата (zuher @ 8.01.2017 - 11:26)
я получу ближайшую свободную дату, но она может пересечься с тизером который активен, например, на следующий день и попасть в окно размером в сутки - двухдневным тизером

Каким образом? topend то максимальный.

Кстати, можно еще проще выбрать:
SELECT MAX(topend) ....


_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
zuher
Цитата (T1grOK @ 8.01.2017 - 11:49)
Цитата (zuher @ 8.01.2017 - 11:26)
я получу ближайшую свободную дату, но она может пересечься с тизером который активен, например, на следующий день и попасть в окно размером в сутки - двухдневным тизером

Каким образом? topend то максимальный.

Кстати, можно еще проще выбрать:
SELECT MAX(topend) ....

Да, максимальный, я про это и говорю)))
А где то ДО НЕГО, есть свободный диапазон в те же два дня, и он будет пустой дыркой среди тизеров
T1grOK
Тогда еще проще, просто проверяем по позициям тизеры(а их так или иначе нужно извлекать) topend > NOW(), если вернулось меньше строк, чем позиций, то закрепляем новый тизер за освободившейся позицией.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
zuher
Цитата (T1grOK @ 8.01.2017 - 12:12)
Тогда еще проще, просто проверяем по позициям тизеры(а их так или иначе нужно извлекать) topend > NOW(), если вернулось меньше строк, чем позиций, то закрепляем новый тизер за освободившейся позицией.

Вот уже подходим к истине)))
А если очередь на неделю вперёд стоит))) и тоже в разных диапазонах)))
Valick
zuher, не удивительно, что у вас ничего не получается, сама постановка задачи ебанутая (другого слова я не подобрал в течении 15 минут)




_____________
Стимулятор ~yoomoney - 41001303250491
T1grOK
Совсем думать не хотите.
Хоть на десятилетие вперед пусть расписано. Если на позиции на текущий момент никого, то можно вычислить размер диапазона отталкиваясь от текущего момента и до начала действия следующего тизера. И под размер диапазона подобрать подходящий свободный тизер.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
zuher
Цитата (T1grOK @ 8.01.2017 - 12:40)
Совсем думать не хотите.
Хоть на десятилетие вперед пусть расписано. Если на позиции на текущий момент никого, то можно вычислить размер диапазона отталкиваясь от текущего момента и до начала действия следующего тизера. И под размер диапазона подобрать подходящий свободный тизер.

Думать то хочу, зря Вы так, говорю же, запутался совсем в логике уже за неделю.
Когда что то не получается и в голове не укладывается, начинаются метания шаг вперёд-два назад
zuher
Цитата (Valick @ 8.01.2017 - 12:38)
zuher, не удивительно, что у вас ничего не получается, сама постановка задачи ебанутая (другого слова я не подобрал в течении 15 минут)

В чём ебанутость, позвольте уточнить?
Подскажите другую реализацию, если Вы настолько охуенны.
Я для того на форум и обратился, чтобы или помощь получить или оплатить услуги более сведущего.
Умничать то все горазды...
zuher
user posted image
нарисовал график, чтобы самому понятнее было и вам понятнее
исходя из этого графика найдя по запросу
select where 'topend'>=NOW() order by 'topend' limit 1 desc

ближайший topend у нас будет 4 позиция 2/01
но видно, что позиции 5,2 и 3 нас более устраивают, например для двухдневного тизера

и вот эти самые пустоты я и не могу понять, как вычислить

Тупо перебором, получается почти бесконечный цикл
redreem
стройте в отдельной табличке "расписание".
типа "день" -> "количество подписанных на этот день тизеров".
есть же у вас полюбому какой-то дневной лимит на показы или как-то еще это лимитировано.
добавляется новый тизер - из расписания делаем выборку ближайшего дня у которого лимит не достигнут и лимит которого позволяет всунуть этот новый тизер.
это к тому же будет быстрее, чем бегать по всему списку тизеров и "что-то там анализировать на ходу"
zuher
redreem лимитировано только временем показа, так что получится, что эта таблица будет дублировать то же самое и там так же встанет вопрос поиска "окон" - процесс полностью автоматизированный, пользователи сами подают заявки на тизеры.
Сейчас при добавке тизера мне приходит письмо на почту и мне приходится "руками" перемещать их если происходит "нахлёст" - но заявок всё больше, поэтому встал вопрос их автоматически размещать в нужное время
Быстрый ответ:

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