根据计数更新一组记录 - 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
);
我的 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
);