Pergunta

Minha função de logout precisa atualizar a linha mais recente de uma lista de logins.

É isso que eu criei, no entanto, ele nem passa a validação de sintaxe.

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

Essencialmente pode haver 30 ou mais com o mesmo user_id valor. Eu só gostaria de atualizar o último login. Este será obviamente o mais recente datetime valor.

O que estou fazendo errado?

Foi útil?

Solução

Isso deve funcionar, desde que sua coluna DateTime seja uma timestamp ou a datetime campo de tipo.

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

Outras dicas

Você teria que usar uma subconsulta para isso.

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

Ou algo parecido com isto.

Editar:Como afirma o comentário, isso não funcionará devido à falta de apoio no MySQL. Vou deixar esta resposta para a referência.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top