我有一个名为vips
的表格,其中包含列:
用户,timePayed,timeEnds,months
用户,timePayed和几个月正在按我想要的值(意味着他们正在工作)。现在他们拥有的是用户名:用户名
timePayed:time()(付款的时间戳)
月:1-7(选择买家)
现在我每次加载页面时都尝试放置一个函数来“刷新”'timeEnds'列。所以我的功能里面有这个:
$timeNow = time();
$query = DB::query("SELECT * FROM vips WHERE timeEnd='new';");
$row = mysql_fetch_assoc($query);
$months = $row['months'];
$timePayed = $row['timePayed'];
$payEnds = strtotime('+'.$months.' months +1', ($timePayed - $timeNow));
现在我想以某种方式添加:
DB::query("UPDATE vips SET timeEnd='$payEnds' WHERE timeEnd='$payEnds';");
对于每列更新列 - > payEnds = months * timesPayed但我不能。列看起来像这样:
user timePayed TimeEnds months
78 1408958750 new 2
79 1408958752 new 6
73 1408958904 new 8
应该看起来像:
user timePayed TimeEnds months
78 1408958750 5350978 2
79 1408958752 5350978 6
73 1408958904 5350978 8
示例:5350978 =将成为这个(我想即使这是错误的:
DB::query("UPDATE vips SET timeEnd='$payEnds' WHERE timeEnd='$payEnds';");
答案 0 :(得分:1)
这种方法需要多次查询才能正常运行。
幸运的是MySQL是为此而制作的,所以只需运行此查询:
UPDATE vips
SET timeEnds = UNIX_TIMESTAMP( (DATE_ADD( FROM_UNIXTIME(timePayed), INTERVAL months MONTH ) )) - UNIX_TIMESTAMP(NOW())
这意味着:
FROM_UNIXTIME(timePayed)
-> convert from unix time to MySQL date
DATE_ADD( FROM_UNIXTIME(timePayed), INTERVAL months MONTH )
-> find out the expiry date
UNIX_TIMESTAMP(...)
-> we convert the whole expiry date back to integer, for easier math
UNIX_TIMESTAMP(NOW())
-> we see how much time is left between now and the expiry date
缺点:
NOW()
不是复制友好的如果这是一件小事,你可以这样做,但如果你想做一件更大的事情,你应该只在需要时计算timeEnds
。