2010-03-01 4 views
0

Ma fonction de déconnexion doit mettre à jour la dernière ligne d'une liste de connexions.Mettre à jour la requête qui doit trouver la ligne «la plus récente»

C'est ce que j'ai trouvé, mais il ne passe même pas la validation de la syntaxe.

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

Essentiellement il peut y avoir 30 ou alors avec la même valeur user_id. Je voudrais seulement mettre à jour la dernière connexion. Ce sera évidemment la valeur datetime la plus récente.

Qu'est-ce que je fais mal?

+0

Quelle erreur obtenez-vous? – Sarfraz

+0

Cela prendrait 10 secondes sans cadre. Ils doivent être amusants. –

Répondre

1

Cela devrait fonctionner, à condition que votre colonne datetime soit un champ de type timestamp ou datetime.

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

+1 pour la vitesse. Dang. Je vais supprimer ma réponse en double, et apprendre à taper plus vite :) –

0

Vous devez utiliser une sous-requête pour cela.

$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 quelque chose comme ça.

Modifier: Comme le commentaire l'indique, cela ne fonctionnera pas en raison du manque de support dans MySQL. Je vais laisser cette réponse pour la référence.

+0

Malheureusement, cela ne fonctionnera pas avec MySQL. Vous obtiendrez une erreur 'Erreur 1093 (ER_UPDATE_TABLE_USED)' (voir http://dev.mysql.com/doc/refman/5.0/en/subquery-errors.html) –

+0

Dans la sous-requête, vous devez également ajouter l'utilisateur id condition, sinon vous obtiendrez le datetime maximum de n'importe qui n'est pas l'utilisateur actuel. –

+0

Hmm, mysql a encore beaucoup à ajouter. – Ikke