例: 500积分,分5次返还(即每次100),5天返还一次
思路:
数据库结构:
status number time
状态 剩余数值 最近一次返还时间
方法:
每天固定时间执行cron,查询状态为开始返还(1)的记录,判断当前时间和记录的time是否超过5天,如果
超过就把number减去100,并更新time, 再判断number是否为0,如果为0,更新status为返还完成(0)。
问题:
不了解解决这类问题的最佳方法,这只是自己按流程走想到的,请大神指导。
应该还有一张为用户加积分的表,这里我大概说下我的思路
1、status,time字段加联合索引
2、先算出time超过5天的时间,如$time = date("Y-m-d H:i:s", strtotime("-5 days"));
mysql:开启事务
3、根据这个时间和status=1作为条件去查询
// 先查询需要给用户加积分的用户,然后再去减积分
4、为用户添加积分(这里不作说明具体不知道你的另一张表是什么样的)
这里用了limit主要是为了防止数据过大,一次查询太多会慢
3、4步完成后再接着走下面,记住事务不能断
5、然后根据这个时间和status=1作为条件去修改积分 (先扣除后再修改状态)
6、查询status=1 and number=0的修改状态为0
mysql:关闭事务