我有一些困难,以获得我的mysql查询的权利。当前状态如下:
我有一个包含todo的表,其中datetime字段更改为(insert/update时设置为current datetime)
我要生成一个检查插入/更新的查询:
如果有20个以上的项的值设置为1
如果是,则删除所有早于这20个项目的项目
其他信息:
表结构:
示例数据:
这样一个查询的预期结果是,所有todo都具有datetime字段 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
)";
(limit子句中需要第二个参数。它需要大于第一个参数)我认为这个查询的问题是,它需要在每次更新时执行-这似乎不是很有效。有什么办法能提高效率吗?
暂无答案!
目前还没有任何答案,快来回答吧!