2009-07-08 2 views
2

Мне нужно сохранить поле в базе данных и как-то обновить его, а затем мне нужно проверить это время, чтобы узнать, было ли это более 30 минут назад или нет, а если нет, то сколько минут осталось до 30 ?MySQL: Сколько минут назад была обновлена ​​БД?

Я собираюсь делать это с помощью PHP + MySql, может ли кто-нибудь сказать мне простейший способ сделать это?

Спасибо!

+0

Нужно ли обновлять поле даты каждый раз, когда база данных обновляется, любая вставка/обновление/удаление в любой таблице? –

+0

«сохранить поле в базе данных»: вы имеете в виду «таблица» -> проверить, обновлена ​​ли каждая отдельная запись? Или вы действительно имеете в виду «в прошлый раз что-либо в базе данных было изменено»? – VolkerK

+0

Я просто имею в виду таблицу не всей базы данных. –

ответ

0

Предположим, вы хотите знать, как давно прошло последнее обновление/вставка в таблице.
Вы можете создать таблицу с полем временной метки с на п обновление

CREATE TABLE foo (
    id int auto_increment, 
    ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    primary key(id), 
    key(ts) 
) 

, а затем запросить запись с наибольшим значением в TS

SELECT 
    TIMEDIFF(Now()-Interval 30 Minute, ts) 
FROM 
    foo 
ORDER BY 
    ts DESC 
LIMIT 
    1 

редактирования: Это также работает, если вы хотите для получения всех записей, которые были вставлены/изменены в последние 12 часов.

SELECT 
    TIMEDIFF(Now()-Interval 30 Minute, ts) 
FROM 
    foo 
WHERE 
    ts > Now()-Interval 12 hour 
ORDER BY 
    ts DESC 

edit2: есть также шанс покинуть вы можете быть заинтересованы в http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html:

SHOW TABLE STATUS возвращает следующие поля:
...
UPDATE_TIME
Когда файл данных последнего обновления. Для некоторых модулей хранения это значение равно NULL. Например, InnoDB хранит несколько таблиц в своем табличном пространстве, а временная метка файла данных не применяется.Для MyISAM используется временная метка файла данных; однако в Windows метка времени не обновляется обновлениями, поэтому значение неточно.

+0

ОК, как только я получу временную метку, как я могу сказать, сколько минут назад это было? Благодаря! –

+0

результат timediff() имеет формат «hh: mm: ss.fractions». В случае первого запроса TIMEDIFF (Now() - Interval 30 Minute, ts), результат имеет знак «минус», если последняя вставка/обновление меньше 30 минут назад. So -05: 00: 00 означает «последнее обновление - 25 минут назад, 5 минут до 30 минут». – VolkerK

0

Я мог бы обернуть все вставки и обновления MySql вызовы в функции что-то вроде следующего:

function MySqlQuery($query, $res){ 
    $result = mysql_query($qs, $res); 
    if($result === false){ 
     mysql_query("QUERY STRING TO UPDATE FIELD IN DATABASE WITH NEW TIME", $res); 
    } 
    return $result; 
} 

Заменить «QUERY STRING ОБНОВЛЯТЬ ПОЛЯ В БАЗЕ с Новым Временем» с реальным запросом обновления, и вы должно быть хорошо.

+0

Слишком навязчивый. Должен быть более понятный подход. –

0

Что я делаю, поставьте временную печать на последней записи. Потяните последнюю запись с помощью MySQL Query, а затем используйте функцию массива mysql fetch, чтобы получить время последней записи. Это делается одинаково для использования базы данных, которая обновляется только с учетом времени.

Вы могли бы управлять этим временем с помощью функции, которая сравнивает текущее время с временем записи. Оттуда вы можете отобразить время с момента последнего опубликования, и если это более 30 минут, вы можете заставить его эхо-сообщение.

$currenttime = /* PHP Time Formatting you wish to use. */ 

$query = mysql_query("SELECT time FROM database"); 
$row = mysql_fetch_array($query); 

echo "Last Record Posted @" . $row['time']; 

$timesince = $currenttime - $row['time']; 
echo "Time Since Last Post:" . $time - $row['time']; 

if($timesince >= "30"){ 
echo "Over 30 Minutes!"; 
} 

Дайте мне знать, если возникнут какие-либо вопросы. Вышеприведенный код должен дать вам представление о том, как он будет работать, но это пример.

Best of Luck !!

EDIT :::

К сожалению, я неправильно понял вопрос, вы все равно необходимо будет ввести время в базу данных. Вы все еще можете использовать приведенный выше код, чтобы вытащить время и посмотреть, превышает ли оно 30 минут или нет.

Для отметки времени отметьте PHP Time Manual. Вы захотите выбрать одинаковый формат времени для ввода MySQL и кода, который я разместил выше.

+0

Вы должны указать, как генерируется время. Думаю, это временная метка. –

+0

PHP timestamp, следовательно, форматирование времени PHP, которое вы хотите использовать. –

Смежные вопросы