Я сделал сайт, на котором мои пользователи могут размещать рекламу.
Теперь я хочу автоматически изменить одну строку в своей таблице объявлений через определенное время.
Например: скажем, что мой пользователь загружает / публикует AD, и до того, как он опубликовал его, он получает выбор, хочет ли он сохранить его в течение 8 дней или 16 дней.
Должен ли я проверить это с помощью cron или есть лучший способ сделать это?
Видимый называется «активным» БД, – tinyint 1 или 0.
заранее спасибо,
У вас есть 2 варианта управления этим как в зависимости от выбранного времени.
Сохраните время истечения срока действия с объявлением и включите истечение срока действия> СЕЙЧАС (); в любых запросах на выбор объявлений (этот тип отрицает требование для «активного» поля.
используйте событие для управления этим.
Метод 1 может потребовать некоторого администратора для «очистки рекламы».
Метод 2 – вы еще не можете создавать события в процедуре (в прошлый раз, когда я проверял), но они позволяют вам устанавливать и забывать такие административные функции, не выполняя другие проверки и что-то не.
Каждое событие должно иметь уникальное имя, иначе вы убьете уже указанное событие …
пример:
<?php $qry = "insert into ads values ( 'x', 'y', 'z' );"; /* db execute qry (pdo or what ever) */ $adId = // retriev a unique reference for ad. $days = $_POST['expire'] == 16 ? 16 : 8; $qry = "CREATE EVENT updateAd_".$adId." ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL ".$days." DAY ON COMPLETION NOT PRESERVE DO update ads set active = 'false' where ad_id = ".$adId.";"; // db execute qry (pdo or what ever); ?>
Событие хранится в базе данных mysql, а не в вашем собственном, поэтому вам нужны некоторые разрешения уровня администратора для реализации.
Можете ли вы сохранить дату истечения срока? Итак, создайте столбец, в котором вы храните дату. Когда пользователь создает объявление, затем подсчитайте дату через 8 дней и сохраните его в столбце. Затем в вашем запросе, чтобы вытащить объявление, вы можете ограничить те объявления, срок годности которых еще не наступил.
Сохраните дату истечения срока действия. Затем используйте запрос:
select * from table where Expiration_date>now();
Если вы используете PHP, проверьте функцию strtotime . Вы можете использовать его для создания своей даты так:
$expiration = date("Ymd H:i:s",strtotime('+ '.$num.'days'));
Если у вас поле «Expiration_date», поле «active» не требуется. Заявление
select Expiration_date>now() as active from table
будет эквивалентным.