Mailinglisten-Archive |
> > Wenn man den Rest löschen will, löscht man
> > alle Knoten, wo der Parent nicht mehr existiert (und die nicht der
> > Root-Knoten
> > sind). Das mach man so lange, bis einmal keine Zeilen mehr
> gelöscht wird.
>
> das is doch mal ne super idee!
hallo,
ich weiss nicht, ob das optimal ist, aber ich mach das meisstens so:
(habe mal die mysql standard sachen rausgelassen)
function rekursedel($rootid)
{
if(empty($rootid))
return false;
$query = sprintf("select * from <tabelle> where parent_id = %d", $rootid);
// ...
while($ergebnis = mysql_fetch_object($result))
{
// hat dieses kind kinder?
$query = sprintf("select id from <tabelle> where parent_id = %d",
$ergebnis->id);
$result2 = mysql_db_query(...);
// wenn ja, rekursiver abstieg
if(mysql_num_rows($result) > 0)
rekursedel($ergebnis->id);
// nein, er hat keine kinder (oder keine mehr)
$query = sprintf("delete from <tabelle> where id = %d", $ergebnis->id);
mysql_db_query(...);
}
return true;
}
keine gewaehr...
/achim
php::bar PHP Wiki - Listenarchive