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

Update a set of records based on count - MySQL

我的 table - 汽车中有 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
)

MySQL documentation 没有解释为什么不支持这种类型的子查询中的 LIMIT 子句。但是子子查询就没有这个限制了。

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

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

最内层的查询将select只有最后五行,并且存在只是为了满足子查询不应包含limit子句的要求。

最终查询如下所示:

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.