Обновить запрос, который должен найти «самую новую» строку
Вопрос
Моей функции выхода из системы необходимо обновить последнюю строку списка входов в систему.
Это то, что я придумал, однако оно даже не проходит проверку синтаксиса.
$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.Я оставлю этот ответ для справки.
Не связан с StackOverflow