从datetime早于另一项的datetime的mysql表中删除

gstyhher  于 2021-06-18  发布在  Mysql
关注(0)|答案(0)|浏览(291)

我有一些困难,以获得我的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子句中需要第二个参数。它需要大于第一个参数)我认为这个查询的问题是,它需要在每次更新时执行-这似乎不是很有效。有什么办法能提高效率吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题