0

我正在尝试使用“到期日期”更新 MySQL 表。当人们注册到表中时,我已经为我的所有行收集了一个时间戳值,但现在我想创建一个相对于该时间戳的到期日期(而不是相对于当前时间)。这是我的代码:

$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);

了解这是在“while”循环中运行的,因此它会遍历表的每一行并随时更新它们。问题是我运行了一次,它所做的只是将“expiration_date”行更新为从现在开始的 56 天,而不是从时间戳的值开始的 56 天。时间戳设置在 CURRENT_TIMESTAMP 上,用于注册新条目时,我认为这是问题所在。我已经回显了 $timestamp 以进行故障排除,当我回显它时它会回显正确的值(不是当前时间),但是当它实际更新到期日期时,它似乎是从它是一个 CURRENT_TIMESTAMP 的事实中得出的。有没有办法显式查询时间戳的值?

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

4

2 回答 2

0

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

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

我假设 MySQL 中存在一些“错误”(不知道),因为如果您不添加a.timestampFieldName = a.timestampFieldName,那么该字段将设置为当前时间戳;

于 2013-04-19T01:20:56.493 回答
0

可能不知何故,值$timestamp是错误的。

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

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

于 2013-04-19T00:31:56.457 回答