织梦如何用SQL将文章删除到回收站?

99ANYc3cd6
预计阅读时长 10 分钟
位置: 首页 织梦建站 正文

织梦的“删除到回收站”功能,并不是真正从数据库中删除记录,而是将文章状态标记为“待审核”或“删除”,并将其从主表移动到回收站数据表。

织梦如何用sql删除文章到回收站
(图片来源网络,侵删)

下面我将为你提供详细的步骤和SQL语句。

核心逻辑

  1. 主表 dede_archives:存放文章的基本信息(标题、ID、发布时间等),删除到回收站时,会将此表中的记录删除。
  2. 副表 dede_arctiny:存放文章的简略信息,删除到此表。
  3. 回收站表 dede_recyclebin:存放被删除的文章信息,删除到此表。
  4. 模型附加表:如果你的文章使用了自定义模型(如产品、图集等),还会有对应的附加表(如dede_addonarticle),这些表中的记录也需要被移动或删除。

一个完整的“删除到回收站”操作,需要执行以下几个SQL步骤:


详细操作步骤

重要提示: 在执行任何SQL操作之前,务必备份数据库!以防误操作导致数据丢失,你可以通过phpMyAdmin等工具导出整个数据库。

第1步:将文章从主表 dede_archives 移动到回收站表 dede_recyclebin

这是最关键的一步,织梦自带了一个存储过程 sp_movearc recyclebin,就是用来干这个的,我们可以直接调用它,这比手动写SQL更安全、更完整。

织梦如何用sql删除文章到回收站
(图片来源网络,侵删)

SQL语句:

CALL sp_movearc_recyclebin(文章ID);

如何使用:

  1. 将上面的 文章ID 替换为你想删除的文章的实际ID。
  2. 如果要删除多篇文章,可以连续执行多次,或者使用循环(如果你的客户端支持)。

示例:删除ID为 10 的文章到回收站

CALL sp_movearc_recyclebin(10);

示例:删除ID为 10, 25, 38 的三篇文章到回收站

织梦如何用sql删除文章到回收站
(图片来源网络,侵删)
CALL sp_movearc_recyclebin(10);
CALL sp_movearc_recyclebin(25);
CALL sp_movearc_recyclebin(38);

第2步:删除副表 dede_arctiny 中的记录

当主表记录被移走后,副表中对应的记录也应该被删除,以保持数据一致性。

SQL语句:

DELETE FROM dede_arctiny WHERE id = 文章ID;

示例:删除ID为 10 的文章在副表中的记录

DELETE FROM dede_arctiny WHERE id = 10;

同样,对多篇文章需要执行多次。


第3步:处理模型附加表(如果文章有)

如果你的文章使用了自定义模型(普通文章模型可能没有,但产品、软件下载等模型有),你还需要删除或移动附加表中的数据。

假设你的文章ID是 10,并且它属于一个附加表(dede_addonarticle,这是文章常用的附加表)。

SQL语句:

DELETE FROM dede_addonarticle WHERE aid = 文章ID;

示例:删除ID为 10 的文章在附加表 dede_addonarticle 中的记录

DELETE FROM dede_addonarticle WHERE aid = 10;

注意: dede_addonarticle 中的关联字段是 aid,而不是 id,其他自定义模型的附加表,其关联字段可能也是 aid,请务必确认。


批量删除到回收站的SQL脚本

如果你需要一次性删除大量文章,可以组合使用 IN 语句。

假设你要删除ID为 1, 2, 3, 4, 5 的所有文章到回收站。

使用存储过程(推荐)

虽然 CALL 语句通常一次只能处理一个ID,但你可以通过脚本循环调用,在phpMyAdmin中,你可以使用如下多行语句(注意分号):

-- 1. 移动到回收站表
CALL sp_movearc_recyclebin(1);
CALL sp_movearc_recyclebin(2);
CALL sp_movearc_recyclebin(3);
CALL sp_movearc_recyclebin(4);
CALL sp_movearc_recyclebin(5);
-- 2. 从副表删除
DELETE FROM dede_arctiny WHERE id IN (1, 2, 3, 4, 5);
-- 3. 从附加表删除 (假设是文章模型)
DELETE FROM dede_addonarticle WHERE aid IN (1, 2, 3, 4, 5);

手动执行(不推荐,除非你完全理解织梦结构)

如果你不调用存储过程,就需要手动完成所有步骤,这很繁琐且容易出错:

-- 1. 先将数据插入到回收站表 (需要手动构建数据)
-- 这一步非常复杂,需要从多个表中查询数据并插入,极易出错,强烈不推荐。
-- 强烈建议使用方法一的存储过程。
-- 2. 然后从各个表中删除
DELETE FROM dede_archives WHERE id IN (1, 2, 3, 4, 5);
DELETE FROM dede_arctiny WHERE id IN (1, 2, 3, 4, 5);
DELETE FROM dede_addonarticle WHERE aid IN (1, 2, 3, 4, 5);

总结与最佳实践

  1. 首选方案:使用 CALL sp_movearc_recyclebin(文章ID);,这是织梦官方提供的标准方法,能确保所有相关数据(包括栏目缓存、评论等,如果存储过程里包含的话)都得到正确处理。
  2. 操作顺序:先调用存储过程移动数据,然后再执行 DELETE 语句清理副表和附加表。
  3. 备份数据库:这是铁律,永远不要跳过这一步。
  4. 精确ID:确保你的文章ID是准确的,错误的ID会导致误删。
  5. 确认模型:在操作附加表前,确认你的文章使用了哪个模型,以及对应的附加表名称和关联字段。

通过以上SQL语句,你就可以安全、高效地将织梦CMS中的文章删除到回收站了。

-- 展开阅读全文 --
头像
织梦dede网址导航二次开发模板如何修改?
« 上一篇 12-10
超酷Win8风格企业织梦模板如何适配多终端?
下一篇 » 12-10

相关文章

取消
微信二维码
支付宝二维码

目录[+]