2013-04-19 69 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則此字段將被設置爲當前時間戳;