2013-04-19 107 views
0

我试图用'过期日期'更新MySQL表。我收集了我所有行的时间戳值,因为人们已经注册到表中,但现在我想创建相对于该时间戳的过期日期(而不是相对于当前时间)。这里是我的代码:相对于CURRENT_TIMESTAMP的更新行没有给出正确的值

$timestamp = $row['timestamp']; 
$sql_update = " 
UPDATE jobs 
SET expiration_date = DATE_ADD('$timestamp',INTERVAL 56 DAY)"; 
$result_update = $mysqli->query($sql_update) or die($mysqli->error); 

明白,这是正在运行的“而”循环所以它的运行通过表的每一行,因为它进入一个更新它们。问题是我运行了一次,它所做的只是将“expiration_date”行更新为NOW的56天,而不是56天后的时间戳值。时间戳在CURRENT_TIMESTAMP上设置,以便当我注册一个新条目时,我认为是问题所在。我回应了$ timestamp来排除故障,当我回应它时,它会回应出正确的值(而不是当前时间),但是当它实际更新过期日期时,它似乎是从CURRENT_TIMESTAMP这一事实中绘制出来的。有没有办法显式查询时间戳的值?

我希望找到一种不涉及重构数据库的方式。我知道我可以拥有它,而不是一个时间戳记行,我可以使它成为一个日期时间行,并将其设置为NOW()的值,当数据库最初被查询添加一行时,但我更愿意找到一个解决方案表格当前的设置方式。谢谢!

回答

0

可能是某种程度上$timestamp中的值是错误的。

尝试使用列名直接在查询中添加时间戳。例如。 :DATE_ADD(timestamp,INTERVAL 56 DAY)

你目前在做什么,几乎没有任何意义。您首先从数据库获取时间戳,并将其分配给$timestamp变量,仅在查询中再次使用它。 在这些情况下,您可以更好地直接使用列名访问查询中的数据。

0

我想知道你为什么要在循环中运行这个查询? 您只能使用一个sql语句。从select中更新;

update jobs a set a.expiration_date = DATE_ADD(a.timestampFieldName,INTERVAL 56 DAY), a.timestampFieldName = a.timestampFieldName; 

我supose有一些“错误”(不知道)在MySQL,因为如果你不加a.timestampFieldName = a.timestampFieldName则此字段将被设置为当前时间戳;