Планировщик событий MySQL устанавливает дату истечения срока действия данных и автоматическое обновление, если истек срок действия


Как установить срок действия данных в MYSQL на дату истечения срока действия? И как автоматически удалить пакет SILVER из пакета User1 по истечении срока действия и автоматически обновить пакет до пакета FREE.

User2 и GOLD пакет имеет тот же вопрос, что и User1.

Для примера:

Я хотел бы установить срок годности для SILVER и GOLD пакетов следующим образом:

SILVER Package for 1 Month (30 days)
GOLD   Package for 2 Months (60 days)

User1 купите пакет SILVER на 27/1/2559 16:20 и этот пакет был удален из User1 на 26/2/2016 16:20 затем автоматическое обновление до пакета FREE для User1.

User2 купите пакет GOLD на 15/3/2559 16:20, и этот пакет был удален из User2 на 14/5/2016 16:20, затем автоматическое обновление до пакета FREE для User2.

Tbl_package

| id | name   |
---------------
| 1  | FREE   |
| 2  | SILVER |
| 3  | GOLD   |

Tbl_member

| id | name  | package |
------------------------
| 1  | User1 | SILVER  |
| 2  | User2 | GOLD    |
| 3  | User3 | Free    |

2   2   2016-01-28 05:14:08

2 ответа:

Во-первых, добавьте столбец timestamp в tbl_member, например дату истечения срока действия. Установите столбец так, чтобы по умолчанию он был равен null. Когда пользователь обновится, обновите этот новый столбец в своем PHP-коде.

Что-то должно быть запущено, чтобы изменить просроченные пакеты. Хотя наиболее эффективным вариантом является автоматический cron-скрипт, который запускается ежедневно или ежечасно, вы можете просто запускать его каждый раз, когда пользователь входит на сайт. Вы хотите изменить пакеты для каждой строки tbl_member, у которых есть срок годности в прошлом. Изменение значения пакета столбца package по сути то же самое, что и его удаление. Кроме того, вы хотите установить дату истечения срока действия в null, потому что бесплатный пакет никогда не истекает.

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

UPDATE tbl_member SET package="Free",expire=null WHERE expire < now()

Вы можете создать cron jobs для этого он будет проверять каждый день, чтобы найти expried member и обновить их. Вы можете прочитать здесь http://goo.gl/VJIHkE