2010-03-01 4 views
0

내 로그 아웃 기능은 로그인 목록의 최신 행을 업데이트해야합니다.'최신'행을 찾아야하는 업데이트 쿼리

이것은 문법 유효성 검사를 통과하지 못했지만 필자가 생각해 낸 것입니다.

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

본질적으로 3030 정도의 동일한 값이 있습니다. user_id입니다. 마지막 로그인 만 업데이트하고 싶습니다. 이것은 분명히 가장 최근의 datetime 값입니다.

내가 뭘 잘못하고 있니?

+0

어떤 오류가 발생합니까? – Sarfraz

+0

프레임 워크 없이는 10 초가 걸립니다. 그들은 재미 있어야합니다. –

답변

1

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'; 
+0

+1 속도. Dang. 내 중복 답변을 삭제하고 더 빨리 입력하는 방법을 배웁니다. :) –

0

이 경우 하위 쿼리를 사용해야합니다.

$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에서 지원이 부족하기 때문에 작동하지 않습니다. 나는이 답을 참고 용으로 남겨 둘 것이다.

+0

불행히도 이것은 MySQL에서는 작동하지 않습니다. 'Error 1093 (ER_UPDATE_TABLE_USED)'오류가 발생합니다 (http://dev.mysql.com/doc/refman/5.0/en/subquery-errors.html 참조) –

+0

하위 쿼리에서 사용자를 추가해야합니다 id 조건이 없으면 현재 사용자가 아닌 다른 사용자로부터 최대 datetime을 얻습니다. –

+0

흠, mysql은 여전히 ​​추가해야 할 것이 많다. – Ikke