MySQL Удаляет Записи Старше X Минут?


Я довольно долго искал и нашел несколько решений, которые в конечном итоге не сработали для меня, и не могу понять, почему.

У меня есть таблица со столбцом временных меток. Тип MySQL для этого столбца - "дата-время". Я вставляю в эту таблицу следующее из PHP.

date('Y-m-d H:i:s')

Это вводит, что выглядит как правильное значение для даты и времени MySQL.

2012-06-28 15:31:46

Я хочу использовать этот столбец для удаления строк, которые старше, скажем, 10 минут. Я выполняю следующий запрос, но это не работает. Это влияет на 0 строк.

DELETE FROM adminLoginLog WHERE timestamp < (NOW() - INTERVAL 10 MINUTE);

Может ли кто-нибудь пролить свет на то, что я делаю неправильно и почему это не работает должным образом?

Спасибо.

Author: Sajan Parikh, 2012-06-29

4 answers

Поскольку функция TIMESTAMP() является встроенной функцией, которая возвращает текущую отметку времени, ваш запрос никогда не вернет никаких результатов.

Попробуйте обернуть столбец обратными галочками, чтобы MySQL знал, что вы имеете в виду столбец, а не зарезервированное слово:

DELETE FROM adminLoginLog WHERE `timestamp` < (NOW() - INTERVAL 10 MINUTE);
 16
Author: Marcus Adams, 2012-06-28 20:58:46

timestamp является зарезервированным ключевым словом в mysql. Чтобы использовать timestamp в качестве имени поля, вы должны поместить его в обратные метки, как показано ниже.

`timestamp`

Если time_created - это временная метка unix (int), вы должны иметь возможность использовать что-то вроде этого:

DELETE FROM adminLoginLog WHERE `timestamp` < (UNIX_TIMESTAMP() - 600);

(600 секунд = 10 минут - очевидно)

В противном случае (если значение time_created равно метке времени mysql), вы можете попробовать следующее:

DELETE FROM adminLoginLog WHERE `timestamp` < (NOW() - INTERVAL 10 MINUTE)

Обновление 1

DELETE FROM adminLoginLog WHERE `timestamp` < DATE_SUB( CURRENT_TIME(), INTERVAL 10 MINUTE)

Обновление 2

DELETE FROM adminLoginLog WHERE `timestamp` < DATE_SUB( NOW(), INTERVAL 10 MINUTE)

Демо-версия

 4
Author: Fahim Parkar, 2012-06-28 21:21:38

Я бы создал временную метку в php, а затем передал ее в ваш запрос mysql:

$date = new DateTime();
$date->modify("-10 minutes")
 0
Author: blearn, 2012-06-28 21:02:50

Ваш запрос верен, если у вас есть доступ к phpmyadmin, выполните команду в консоли SQL, которая предоставит вам дополнительную информацию.

 0
Author: fanbondi, 2012-06-28 21:17:59