Обновить запрос, который должен найти «самую новую» строку - PullRequest
0 голосов
/ 01 марта 2010

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

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

$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.

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

Ответы [ 2 ]

1 голос
/ 01 марта 2010

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

$query =
    'UPDATE user_logins
     SET active = 0
     WHERE user_id = ' . Database::instance()->escape($this->getCurrentUserId()) . '
     ORDER BY datetime DESC LIMIT 0,1';
0 голосов
/ 01 марта 2010

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

$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';

Или как то так.

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

...