我的表car中有100条活动记录。用户已决定降级其帐户,现在只有5条活动记录。我需要将95条记录的过期日期(最旧的第一条)设置为当前时间戳。我该如何在MySQL中做到这一点?如果你包含一些cakepp提示,我将非常感谢(但我只感谢你的SQL提示)
以下是我尝试的内容,但我收到一条错误消息,指出mySQL在子查询中不支持LIMIT
UPDATE cars
SET archived = NOW()
WHERE id NOT IN (
SELECT id
FROM cars
ORDER BY created DESC LIMIT 5
)
为了解决这个问题,让我们创建另一个子查询,并将LIMIT子句移到其中:
WHERE id NOT IN (
SELECT id
FROM (
SELECT id
FROM cars
ORDER BY created
DESC LIMIT 5
)
AS carsInner
)
最里面的查询将只选择最后五行,并且存在只是为了满足子查询不应包含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
);
请在此处查看SQL Fiddle演示。