如何删除主类别和子类别

时间:2011-05-27 10:28:07

标签: php mysql

当我删除主要类别时,我无法弄清楚如何删除子子类别。

我提出了两个问题。这在我删除sub和sub sub时有效。但如果我删除的类别是主要的猫。我无法删除子潜艇。

如果id为1,我该怎么做才能删除汽车,菲亚特和熊猫?

cats_id cats_parentid cats_name 
1           0           car
2           1          fiat 
3           2          panda

mysql_query("DELETE FROM cats 
            WHERE cats_id='".$id."'") or die(mysql_error()); 

mysql_query("DELETE FROM cats 
            WHERE cats_parentid='".$id."'") or die(mysql_error()); 

3 个答案:

答案 0 :(得分:1)

您可以将cats_parentid设置为外键,以便在孤立时删除记录。有关语法和更多信息,请参阅mysql文档。

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

答案 1 :(得分:1)

您可以使用这样的递归函数调用(在PHP中):

function delete_subcats($id) {
  $res = mysql_query('SELECT cats_id FROM cats WHERE cats_parentid = '.$id);

  if ($res) {
    while ($row = mysql_fetch_assoc($res))
      delete_subcats($row['cats_id']);
  }

  mysql_query('DELETE FROM cats WHERE cats_id = '.$id);
}

或者,如果您为表使用InnoDB引擎,则需要创建外键

ALTER TABLE cats ADD FOREIGN KEY (cats_parentid) REFERENCES cats(cats_id) ON DELETE CASCADE;

删除父记录后,MySQL数据库将删除所有连接的记录而不进行其他查询。

答案 2 :(得分:0)

你应该创建一个首先递归删除所有孩子的函数,例如:

function delete_cat($id){
    // Try to delete all the childrens first
    $res = mysql_query("SELECT cats_id WHERE  cats_parentid='".$id."'");
    while($row = mysql_fetch_row($res)){
        delete_cat($row['cats_id']);
    }

    // Then delete the cat after all the childrens are deleted
    mysql_query("DELETE FROM cats WHERE cats_id='".$id."'");
} 

希望有所帮助:)

相关问题