Atualize a consulta que precisa encontrar a linha 'mais recente'
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?
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