Mysql Delete и метка времени - PullRequest
0 голосов
/ 08 июня 2018

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

У меня есть таблица с именем "logs", в которой есть пункт "date", то есть INT (11) Timestamp, так что он использует фактическую метку времени для него.

Я собираюсь сделать скрипт, который выполняет команду SQL каждую минуту, который проверяет ВСЕ строки, если у «даты» больше / равно 6 часов,Я так устал и ничего не могу помочь.

Некоторые команды, которые я использовал и не сработали.

DELETE FROM logs WHERE date < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 6 HOUR));
DELETE FROM logs WHERE date < NOW() - INTERVAL 6 HOUR;

Не поможет, поэтому я спрашиваю здесь, можете ли вы помочь мнеСпасибо.

Ответы [ 3 ]

0 голосов
/ 09 июня 2018

Вы можете сделать что-то подобное:

DELETE FROM logs
WHERE FROM_UNIXTIME(date) < UNIX_TIMESTAMP(NOW() - INTERVAL 6 HOUR);
0 голосов
/ 09 июня 2018

Дата «вещь» называется столбцом.Столбец имеет определенный тип данных.Вопрос указывает, что столбец имеет тип данных INT(11).И в этом столбце хранится 32-разрядное целое число в Unix-стиле с 1970-01-01 UTC.

Если это все верно, тогда подходит первая форма запроса.Выражение с правой стороны (меньше чем сравнение) возвращает целое число секунд.

В качестве демонстрации рассмотрим это выражение:

SELECT UNIX_TIMESTAMP( NOW() + INTERVAL -6 HOUR )   ==> 1528450555

или, как оригиналзаписано

SELECT UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 6 HOUR))  

возвращает эквивалентный результат.


Второй запрос может быть оценен, но автоматическое преобразование из DATETIME в числовое вернет нам целочисленное значение, например 20180608153555 (т.е. yyyymmddhhmmss), а не количество секунд с начала эпохи.

Рассмотрим демонстрацию, тип данных DATETIME оценивается в числовом контексте:

SELECT NOW() + INTERVAL -6 HOUR + 0  ==>  20180608153600

Если мы используем это выражение, сравните его сстолбец INT (11) и удалить все строки, у которых столбец INT (11) меньше этого значения, будет удалена каждая строка в таблице, значение которой не равно NULL в этом столбце.

0 голосов
/ 09 июня 2018

Ваш столбец даты должен иметь значение Введите TIMESTAMP , а не INT, чтобы можно было правильно сравнивать метки времени, или вы можете написать:

DELETE FROM logs WHERE FROM_UNIXTIME(date) < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 6 HOUR));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...