我的桌子上有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
)
答案 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
);