背景信息
我正在为游戏 garrys mod 创建一个捐赠/购买系统。当用户通过 paypal 捐赠时,我有 php 代码来处理 iPN 并将数据输入数据库,它还会生成一个序列密钥并将其通过电子邮件发送给用户,然后用户可以在游戏中输入该密钥,当用户在游戏中输入序列时,它会检查数据库查看key是否有效,然后执行相关的lua代码。到目前为止,该系统运行良好,但捐赠包的有效期为30天、90天、180天和365天。
我想要实现的是,当用户在游戏中输入密钥时,我将获得 lua 代码,用于存储玩家的 steam id 以及他们兑换的日期以及该包将持续多长时间。我将设置一个 cron 作业来运行一个脚本,该脚本检查数据库是否使用了密钥,如果密钥已被使用,它将检查,例如,自他们兑换密钥以来是否已经过去 30 天,如果它低于30 天什么都不做,如果超过 30 天,那么它会将表中的值从 0 更改为 1。
Question
我真正难以理解的部分是如何存储日期并检查日期,最初我以为我会使用一年中的某一天,但随后出现了年份从 365 更改为 0 的问题,如果有人购买怎么办如果在 12 月持续 90 天,就会出现错误。那么我怎样才能可靠地解释年份的变化呢?
感谢所有发布答案的人,而且速度也非常快,我想我现在有足够的时间来工作,再次感谢您的时间
好吧,我不知道你的数据库结构,但假设它是这样的:
user_table
-----------------------------------------
user_id | date_of_redeem | subscription
-----------------------------------------
user1 | 2014-02-01 | 90
user2 | 2014-05-18 | 365
user3 | 2014-07-22 | 180
因此,如果仅使用 SQL 语句,您可以使用 DATE_SUB 之类的东西。将 date_of_redeem 与今天的日期减去订阅金额进行比较。如果 date_of_redeem 的值较高,那么您将得到一个结果,否则将返回一个空结果集。
SELECT *
FROM `user_table`
WHERE `date_of_redeem` > DATE_SUB(NOW(), INTERVAL `subscription` DAY) AND `user_id` = 'desired_user_id'
编辑:上述查询的 SQL Fiddle:http://sqlfiddle.com/#!2/f95ea/11 http://sqlfiddle.com/#!2/f95ea/11(只是改变user3
到任何用户 ID 以检查它们是否返回任何结果。
如果您想获得包含所有订阅到期日期的表格,那么您可以执行以下操作:
SELECT `user_id` AS `User`, (DATE_ADD(`date_of_redeem`, INTERVAL `subscription` DAY)) AS `Subscription Ends`
FROM `user_table`
SQL Fiddle 为此:http://sqlfiddle.com/#!2/f95ea/9 http://sqlfiddle.com/#!2/f95ea/9
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)