Неработающий запрос на удаление MySQL. Зачем? - PullRequest
1 голос
/ 15 июня 2011

У меня есть таблица с 3 строками, одна из которых содержит уникальный временной код (например, 1308162911).Этих записей много, но я хочу удалить все записи, которые превышают один день (AKA 86400 секунд).У меня есть этот запрос, но он не работает (ничего не происходит):

$db = mysql_connect($hostname, $db_user, $db_password);
mysql_select_db($database,$db)or die( "Unable to select database");

$now = time() - 86400;
$delete = ("DELETE FROM $tbl WHERE time > '$now'");

Ответы [ 5 ]

1 голос
/ 15 июня 2011

Это должно сработать:

DELETE FROM $tbl 
WHERE FROM_UNIXTIME(`time`) > DATE_SUB(NOW(), INTERVAL 1 DAY);

Иначе, в вашем коде, я думаю, вы должны удалить одиночные кавычки около $ сейчас.Тем не менее, я думаю, что это хорошая идея сделать все это как часть запроса MySQL, чтобы избежать разницы во времени между PHP и MySQL, если они оба работают в разных часовых поясах

1 голос
/ 15 июня 2011
select * from table
where now() - interval 1 day > from_unixtime(unix_timestamp_field)

если это то, что вы ищете, преобразуйте выбор в запрос на удаление

1 голос
/ 15 июня 2011

Я не уверен насчет MySQL, но, вероятно, вам нужно что-то подобное:

DELETE FROM $tbl WHERE DATEDIFF('$now', time) > INTERVAL 1 DAY
1 голос
/ 15 июня 2011

Как насчет этого:

$yesterday = strtotime('-1 day');

$delete = "DELETE FROM $tbl WHERE time > FROM_UNIXTIME($yesterday)";

Приведенный выше запрос удалит все строки, в которых значение времени больше, чем ровно 24 часа назад. Предполагается, что поле «время» имеет тип TIMESTAMP, DATETIME или DATE. Если вы хотите удалить записи, которые старше , чем за день, измените> на <. </p>

1 голос
/ 15 июня 2011

Временная метка Unix увеличивается с течением времени, поэтому ваш запрос удалит все записи более поздние, чем 24 часа назад, но не более 24 часов назад.

Вы должны быть в порядке, чтобы удалить одинарные кавычки вокруг значения временной метки.

Если у вас все еще есть проблема, пожалуйста, вы можете включить строку кода, которая выполняет mysql_query() и формат базы данных (вывод SHOW CREATE TABLE myTable)

...