Я хочу удалить каждую строку, где разница во времени составляет 5 минут. Я использую time () как int.
mysql_query("DELETE FROM users WHERE time()-time > 300");
запрос – проблема …
time()
является функцией PHP – и в SQL не имеет абсолютно никакого смысла.
Вы должны:
unix_timestamp(now())
UNIX, я полагаю, что unix_timestamp(now())
может сделать трюк. time()
из SQL-запроса, поэтому он оценивается PHP. Например, используя вторую идею, я полагаю, вы могли бы сделать что-то вроде этого:
mysql_query("DELETE FROM users WHERE " . time() . "-time > 300");
Предполагая, что время – столбец в таблице пользователей, это то, что вам нужно:
mysql_query("DELETE FROM users WHERE NOW() - INTERVAL 300 SECOND > time");
Функция NOW () – это функция, которая возвращает время на сервере БД, а не на веб-сервере.
Просто убедитесь, что часы на сервере БД и веб-сервере синхронизированы
Вот пример с помощью SELECT
mysql> select now(),(now() - INTERVAL 300 SECOND); +---------------------+-------------------------------+ | now() | (now() - INTERVAL 300 SECOND) | +---------------------+-------------------------------+ | 2011-04-15 16:21:41 | 2011-04-15 16:16:41 | +---------------------+-------------------------------+
mysql_query ("УДАЛИТЬ ОТ пользователей WHERE time <'". (time () – 300). "'");
и этот запрос будет кэшироваться mysql