Арифметические действия в sql запросе

174
01 мая 2018, 02:05

Нужно обновить в базе информацию, если с момента изменения прошло больше 3-х суток. Поле last_edit содержит время в формате UNIX. Делаю так:

$last_edit = 259200; // 3 суток
$this_time = time() - $last_edit; // сколько прошло
$db->query( "UPDATE tablename set status = '0' WHERE last_edit >= ({$this_time} - last_edit) AND revision = '1'" );

В результате изменяются данные постоянно.

Answer 1

Логично

last_edit >= ({$this_time} - last_edit)
2 * last_edit >= $this_time

любая дата обновления, умноженная на два, будет больше текущей даты.

Должно быть

UPDATE tablename set status = 0 WHERE last_edit <= {$this_time} AND revision = 1

А еще лучше убрать переменную $this_time вообще

UPDATE tablename set status = 0 WHERE last_edit <= NOW() - 3600 * 24 * 3 AND revision = 1

P.S. И не нужно в запросе числа обрамлять в кавычки

READ ALSO
Group by не работает со вьюхой

Group by не работает со вьюхой

Выводит запись с id = 1, а должно с id = 2Причем обычным запросом:

196
MySQL: Offset и Limit как правильно составить запрос

MySQL: Offset и Limit как правильно составить запрос

Допустим есть таблица users в которой 40 записей

227
Что делает этот запрос MySQL

Что делает этот запрос MySQL

есть такие запросыЕсли первый,второй,третий я понял, то что делает четвертый? И можно ли его переписать без использования временной таблицы

192