根据计数更新一组记录 - MySQL

时间:2015-02-19 01:16:08

标签: php mysql sql cakephp

我的桌子上有100条活动记录 - 汽车。用户已决定降级其帐户,现在有资格只有5个活动记录。我需要将95个记录(最早的第一个)的到期日期设置为当前时间戳。我如何在MySQL中执行此操作 - 如果您包含一些cakephp提示,请多谢(但我会感谢您仅提供SQL提示)

这是我尝试的但是我收到一条错误消息,指出mySQL在子查询中不支持LIMIT

UPDATE cars 
SET archived = NOW()
WHERE id NOT IN (
    SELECT id
    FROM cars
    ORDER BY created DESC LIMIT 5
)

1 个答案:

答案 0 :(得分:1)

MySQL documentation没有解释为什么不支持此类子查询中的LIMIT子句。但是,子子查询没有这样的限制。

要解决此问题,请创建另一个子查询并将LIMIT子句移入其中:

WHERE id NOT IN (
    SELECT id
      FROM (
        SELECT id 
          FROM cars 
          ORDER BY created 
          DESC LIMIT 5
      )
      AS carsInner
)

最里面的查询将只选择最后五行,并且仅存在以满足子查询不应包含限制子句的要求。

最终查询如下:

UPDATE cars 
  SET `archived` = NOW()
  WHERE id NOT IN (
        SELECT id
        FROM (
          SELECT id 
          FROM cars 
          ORDER BY created 
          DESC LIMIT 5
        )
        AS carsInner
    );

See an SQL Fiddle demo here