我有一些困难,使我的MySQL查询正确。当前状态如下:
我有一个包含Todo的表,其中datetime字段已更改为(在插入/更新时设置为当前datetime)
如果有20个以上的项目的“是否检查”值设置为1
如果是,请删除所有早于这20个项目的项目
其他信息:
示例数据:
此类查询的预期结果是,所有日期时间为field的todo
created_at
超过最新的20个(或x个)项目将被删除。
我有点困在这里,因为这似乎是一个更复杂的查询。我已经阅读了有关日期和时间函数的MySQL文档,但是我不知道如何实现这一点。有人能帮忙吗?
我试过这个:
DELETE FROM todos WHERE todo_id IN
(SELECT todo_id FROM
(SELECT todo_id FROM todos
WHERE list_id = :list_id
AND is_checked = :is_checked
order by created_at ASC LIMIT 20
) a
)
但这会删除最老的20条记录-这不是我想要的。
编辑:这似乎是一个有效的查询:
$sql = "DELETE FROM todos WHERE todo_id IN
(SELECT todo_id FROM
(SELECT todo_id FROM todos
WHERE list_id = :list_id
AND is_checked = :is_checked
order by created_at DESC LIMIT 15, 50
) a
)";