找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4|回复: 0

[技巧分享] 批量删除dz错误帖子的所有关联的表数据都同时删除

[复制链接]
  • TA的每日心情
    奋斗
    2022-9-1 11:24
  • 签到天数: 50 天

    连续签到: 1 天

    [LV.5]常住居民I

    6666
    发表于 昨天 23:48 | 显示全部楼层 |阅读模式

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×
    批量删除dz错误帖子的所有关联的表数据都同时删除

    请了你的数据安全 请备份了 在操作哦
    批量删除主帖及关联数据
    1. START TRANSACTION;

    2. -- 1. 提取待删除的tid列表(创建内存临时表)
    3. CREATE TEMPORARY TABLE tmp_delete_tid
    4. ENGINE=MEMORY AS
    5. SELECT DISTINCT t.tid
    6. FROM pre_forum_post p
    7. INNER JOIN pre_forum_thread t ON p.tid = t.tid
    8. WHERE p.message LIKE '%需要查询的内容%';

    9. -- 2. 删除关联附件
    10. DELETE a
    11. FROM pre_forum_attachment a
    12. INNER JOIN pre_forum_post p ON a.pid = p.pid
    13. WHERE p.message LIKE '%需要查询的内容%';

    14. -- 3. 删除帖子
    15. DELETE FROM pre_forum_post
    16. WHERE message LIKE '%需要查询的内容%';

    17. -- 4. 删除主题(级联删除首帖)
    18. DELETE t
    19. FROM pre_forum_thread t
    20. INNER JOIN tmp_delete_tid tmp ON t.tid = tmp.tid;

    21. -- 5. 更新统计(版块帖子数)
    22. UPDATE pre_forum_forum f
    23. SET posts = posts - (
    24.     SELECT COUNT(*)
    25.     FROM pre_forum_post p
    26.     WHERE p.fid = f.fid
    27.     AND p.message LIKE '%需要查询的内容%'
    28. );

    29. -- 6. 清理临时表
    30. DROP TEMPORARY TABLE tmp_delete_tid;

    31. COMMIT;
    复制代码
    需同步清理的表(根据实际需求选择):
    表名
    操作类型
    SQL示例

    pre_forum_thread
    DELETEDELETE FROM pre_forum_thread WHERE tid IN (SELECT tid FROM tmp_delete_tid)
    pre_forum_attachment
    DELETEDELETE FROM ... WHERE pid IN (被删帖子的PID列表)
    pre_forum_postcache
    DELETEDELETE FROM ... WHERE pid IN (...)
    pre_forum_threadmod
    DELETEDELETE FROM ... WHERE tid IN (...)
    pre_forum_threadhidelog
    DELETEDELETE FROM ... WHERE tid IN (...)
    pre_forum_rsscache
    UPDATEUPDATE ... SET updatetime = ... WHERE tid IN (...)
    回复

    使用道具 举报

    网站地图|页面地图|Archiver|手机版|小黑屋|找资源 |网站地图

    GMT+8, 2025-3-6 20:55

    Powered by Discuz! X3.5

    © 2001-2025 Discuz! Team.

    快速回复 返回顶部 返回列表