更新需要查找“最新”行的查询

时间:2010-03-01 07:33:11

标签: php sql mysql kohana-3

我的注销功能需要更新登录列表的最新一行。

这是我提出的,但它甚至没有通过语法验证。

$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 个答案:

答案 0 :(得分:1)

如果您的日期时间列为timestampdatetime类型字段,则此操作应该有效。

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

答案 1 :(得分: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的支持,这将无法工作。我将留下这个答案作为参考。