当我删除主要类别时,我无法弄清楚如何删除子子类别。
我提出了两个问题。这在我删除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());
答案 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."'");
}
希望有所帮助:)