2013-04-19 3 views
0

Я пытаюсь обновить таблицу MySQL с «датой истечения». Я собрал значение timestamp для всех моих строк, когда люди зарегистрировались в таблице, но теперь я хочу создать дату истечения срока действия относительно этой отметки времени (не относительно текущего времени). Вот мой код:Строка UPDATE относительно 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» до 56 дней с «СЕЙЧАС», не за 56 дней от значения timestamp. Временная метка установлена ​​на CURRENT_TIMESTAMP, когда проблема связана с записью новой записи, которую я предполагаю. Я выделил $ timestamp для устранения неполадок, и он отгоняет правильное значение (а не текущее время), когда я повторяю его, но когда он идет на фактическое обновление даты истечения срока действия, он, похоже, извлекает из факта, что это CURRENT_TIMESTAMP. Есть ли способ явного запроса для значения метки времени?

Я надеюсь найти способ, который не связан с реструктуризацией базы данных. Я знаю, что я мог бы использовать это вместо строки timestamp, я мог бы сделать ее строкой datetime и установить ее значение NOW(), когда база данных будет первоначально запрошена, чтобы добавить строку, но я бы предпочел найти решение внутри способ установки таблицы в настоящий момент. Благодаря!

ответ

0

Возможно, что-то значение в $timestamp неверно.

Попробуйте добавить метку времени непосредственно в запрос, используя имя столбца. Например. : DATE_ADD(timestamp,INTERVAL 56 DAY)

Что вы сейчас делаете, вряд ли имеет смысл. Сначала вы получаете временную метку из базы данных и назначаете ее переменной $timestamp, только чтобы снова использовать ее в запросе. В таких ситуациях вы можете лучше использовать имя столбца для доступа к данным в вашем запросе.

0

Интересно, почему вы выполняете этот запрос в цикле? Вы можете использовать только один оператор sql. Обновить из выбранного;

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

Я supose, что есть некоторые «ошибка» (не знаю) в MySQL, потому что если вы не добавите a.timestampFieldName = a.timestampFieldName то это поле будет установлено значение текущего времени;