MySQL 事件调度程序对数据设置到期日期,并在过期时自动更新


MySQL event scheduler set expiration date on data and auto update if expired

如何将 MYSQL 上的数据设置为到期日期?以及如何在过期日期自动从User1中删除SILVER包并自动更新到FREE包。

User2GOLD包与User1有相同的问题。

举个例子:

我想为SILVER设置到期日期,并像这样GOLD软件包:

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

User1 27/1/2559 16:20上购买SILVER软件包,并且该软件包已从User1中删除,26/2/2016 16:20然后自动更新到FREE软件包以进行User1

User2 15/3/2559 16:20上购买GOLD软件包,并且该软件包已从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    |

首先,将时间戳列添加到tbl_member,例如到期日期。将列设置为默认为 null。当用户升级时,请在 PHP 代码中更新此新列。

必须运行某些内容才能更改过期的软件包。虽然最有效的选项是每天或每小时运行的自动 cron 脚本,但您可以在每次用户登录站点时简单地运行它。您希望修改过去过期日期的每一行tbl_member的包。更改包列的值包本质上与"删除"它相同。此外,您希望将过期日期设置为 null,因为免费包永不过期。

例如,如果过期日期是过去的,则此 SQL 应将所有成员降级到 Free 包:

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

您可以创建一个 cron 作业来执行此操作,它将每天检查以查找过期成员并更新它们。你可以在这里阅读 http://goo.gl/VJIHkE