【问题标题】:I want to delete all subcategory from database automatically when I delete the parent category当我删除父类别时,我想自动从数据库中删除所有子类别
【发布时间】:2017-05-14 11:30:00
【问题描述】:

当从数据库中删除父类别(例如,建筑、艺术和文化)时,我希望从数据库中删除父类别下的所有子类别。我不知道如何为此编写查询。

我使用的是PHP和MySQL数据库,类别和子类别是两个单独的表,下面给出了表的快照。

分类表

子类表

【问题讨论】:

  • 下次使用“SHOW CREATE TABLE”命令将表格发布为文本而不是图像。
  • 请记住,如果您有孩子、物品,请随意称呼它们,在这些类别或子类别中,您将拥有僵尸物品,即不相关的物品。一种选择是同时删除这些项目或将项目迁移到另一个类别。关于删除,您也可以加入他们。 DELETE c, s FROM category AS c JOIN subcategory AS s ON c.cat_id = s.parent_id。我可以添加的另一个提示是合并两个表 cat_id、parent_id、cat_name,但需要一些加入 sql
  • PS:如果您将在子类别中有项目,那么您将很难将其与父类别相关联。这就是我建议合并两张表的原因

标签: php mysql


【解决方案1】:

你必须在这里使用外键。所以如果你删除父ID,那么它的孩子将被自动删除

ALTER TABLE subcategory ADD FOREIGN KEY fk_parent(parent_id)
REFERENCES category(cat_id) ON DELETE CASCADE

【讨论】:

    【解决方案2】:

    您必须设置category and subcategory 之间的关系。我的意思是category 有很多subcategories。所以应该是one-to-many 关系。当您设置此关系时,您必须使用 onDelete cascade。因此,一旦类别删除,子类别将自动删除。

    【讨论】:

      【解决方案3】:
      $id = 1;
      DELETE FROM category WHERE cat_id = $id;
      DELETE FROM subcategory WHERE parent_id = $id;
      

      如果添加删除级联

      $id = 1;
      DELETE FROM category WHERE cat_id = $id;
      

      【讨论】:

        【解决方案4】:

        诀窍不在查询;你的 sql 应该是一个普通的DELETE 查询。

        您需要做的是将FOREIGN KEY 配置为ON DELETE CASCADE

        请参阅本教程: http://www.mysqltutorial.org/mysql-on-delete-cascade/

        【讨论】:

        • 非常感谢.. 这个链接确实清楚地解释了一对多的关系。我现在对此有了一个清晰的认识。
        【解决方案5】:

        使用 ON DELETE CASCADE 添加外键

        ALTER TABLE subcategory ADD FOREIGN KEY fk_parent(parent_id)
        REFERENCES category(cat_id) ON DELETE CASCADE
        

        这会在删除父类别时自动删除子类别。请参阅https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html 了解更多信息。

        【讨论】:

        • 太棒了,谢谢:)
        • 不客气@SanchitGupta,我猜你遇到了同样的问题
        • 我已经尝试对评论进行投票,但我没有足够的声誉,因为我是这里的新手。未来充满希望。 :)
        • 不用担心投票。这是我给你的一个开始oyou你的方式。但是,如果答案有效,请通过勾选标记将其标记为正确,以便将来对其他人有用。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-11
        • 2011-08-05
        • 1970-01-01
        • 1970-01-01
        • 2011-06-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多