Обновить запрос, который должен найти «самую новую» строку

StackOverflow https://stackoverflow.com/questions/2354386

  •  23-09-2019
  •  | 
  •  

Вопрос

Моей функции выхода из системы необходимо обновить последнюю строку списка входов в систему.

Это то, что я придумал, однако оно даже не проходит проверку синтаксиса.

$query =
    'UPDATE user_logins
     SET active = 0
     WHERE user_id = ' . Database::instance()->escape($this->getCurrentUserId()) . '
     AND datetime = MAX(datetime) LIMIT 1';

По сути, их может быть около 30 с одинаковыми user_id ценить.Я хотел бы только обновить последний вход в систему.Это, очевидно, будет самым последним datetime ценить.

Что я делаю не так?

Это было полезно?

Решение

Это должно работать, при условии, что ваш столбец datetime является timestamp или datetime поле типа.

$query =
    'UPDATE user_logins
     SET active = 0
     WHERE user_id = ' . Database::instance()->escape($this->getCurrentUserId()) . '
     ORDER BY datetime DESC LIMIT 0,1';

Другие советы

Для этого вам придется использовать подзапрос.

$query =
    'UPDATE user_logins
     SET active = 0
     WHERE user_id = ' . Database::instance()->escape($this->getCurrentUserId()) . '
     AND datetime = (SELECT MAX(datetime) FROM user_logins WHERE user_id = '' . Database::instance()->escape($this->getCurrentUserId()) . ') LIMIT 1';

Или что-то вроде этого.

Редактировать:Как говорится в комментарии, это не будет работать из-за отсутствия поддержки в MySQL.Я оставлю этот ответ для справки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top