为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL:如何删除特定用户ID的所有旧记录,但保留最新的3个?

MySQL:如何删除特定用户ID的所有旧记录,但保留最新的3个?

PHP
函数式编程 2022-09-30 16:17:20
我有一个名为“令牌”的表,用于存储登录到管理面板的用户的所有登录令牌。    id  users_id    token   created_time        type        access_time220 3       $....   2020-02-20 17:47:19 BACKOFFICE  2020-02-20 17:23:13221 3       $....   2020-02-20 17:47:19 BACKOFFICE  2020-02-21 13:12:16222 3       $....   2020-02-20 17:47:19 BACKOFFICE  2020-02-21 14:35:11223 3       $....   2020-02-20 17:47:19 BACKOFFICE  2020-02-22 15:37:11224 3       $....   2020-02-20 17:47:19 BACKOFFICE  2020-02-22 12:11:56225 3       $....   2020-02-20 17:47:19 BACKOFFICE  2020-02-23 13:59:19我存储用户users_id,创建令牌的时间以及访问和使用令牌的任何时间(以及其他一些位)我的问题是,我将如何删除用户的所有回复,除了最近访问的3个?
查看完整描述

2 回答

?
米脂

TA贡献1836条经验 获得超3个赞

您可以使用 和 :row_number()join


delete t

    from tokens t join

         (select tt.*, row_number() over (partition by user_id order by access_time desc) as seqnum

          from tokens tt

         ) tt

         on tt.id = t.id

    where tt.seqnum > 3;


查看完整回答
反对 回复 2022-09-30
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

使用子查询获取最新的 3 个 ID,然后在删除时将其排除。


DELETE tokens FROM tokens

LEFT JOIN (    

    SELECT id

    FROM tokens

    WHERE users_id = 3

    ORDER BY access_time DESC

    LIMIT 3) AS newest

ON tokens.id = newest.id

WHERE tokens.users_id = 3 AND newest.id IS NULL


查看完整回答
反对 回复 2022-09-30
  • 2 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信