id name parentid
1 category 0
2 question1 1
3 type1 2
4 type2 2
5 question2 0
6 type2 5
7 type2 5
其中:
我想写一个MySQL语句来删除包含所有子记录的选定父级。我怎么能这样做?
答案 0 :(得分:2)
MySQL不支持递归查询...
如果你有一个预定的深度,你可以通过一些连接来完成它。
否则,您需要在应用程序中的代码中执行此操作,或者编写存储过程/函数来执行此操作。
编辑:快速递归功能删除...
function recursiveDelete($id) {
$result=mysql_query("SELECT * FROM yourTable WHERE parentid='$id'");
if (mysql_num_rows($result)>0) {
while($current=mysql_fetch_array($result)) {
recursiveDelete($current['id']);
}
}
mysql_query("DELETE FROM yourTable WHERE id='$id'");
}
答案 1 :(得分:0)
您可以创建外键来支持此功能。
在MySQL中,此操作如下所示:
ALTER TABLE your_table_name ADD CONSTRAINT your_table_name_parentid_to_id
FOREIGN KEY (parentid)
REFERENCES your_table_name (id)
ON DELETE CASCADE ON UPDATE CASCADE;
然后简单地
DELETE FROM your_table_name WHERE id = 2;
将删除question1,type1和type2。
但在这种情况下,请确保每个parentid值都有相等的id值或者parentid为NULL:
id name parentid 1 category NULL 2 question1 1 3 type1 2 4 type2 2 5 question2 1 6 type2 5 7 type2 5
答案 2 :(得分:0)