Kompliziertere delete-Anweisung

Dominik Haubrich

Administrator
Hi,

so ich sitze gerade vor einem grösseren Problem und zwar geht es darum, von http://www.fettepixel.de alle Posts zu löschen, denen kein Thread mehr zugeordnet ist. ~17000 Posts von ~50000 Posts sollen behalten werden.

Das Select-Query zum Anzeigen der Beiträge, die wir behalten wollen ist:
select * from post inner JOIN thread ON post.threadid=thread.threadid

Im Klartext: da wo "post.threadid" und "thread.threadid" identisch sind, soll keine Löschung vorgenommen werden.

Der komplette Rest von der Tabelle "post" soll dem Erdboden gleich gemacht werden. Wer hat eine Idee, wie man das am Einfachsten hinbekommt?
 
hmm ... ich glaube, da wirst Du um eine kleine Programmschleife nicht drum herum kommen.

Allerdings wird die Laufzeit dieses Programms bei so vielen Einträgen sicher recht hoch. :(

In PHP könnte das in etwa so aussehen:

PHP:
$db=mysql_connect($host,$user,$pass);
$sql="select * from post";
$result1 = mysql_query($sql,$db);
while ($row1=mysql_fetch_array($result1)) {
   $sql = "select * from thread where threadid = $row1[threadid]";
   $result2 = mysql_query($sql,$db);
   if (mysql_num_rows($result2)==0) {
      $sql = "delete * from post where threadid = $row1[threadid]";
      $result3 = mysql_query($sql,$db);
   }
}

Du solltest aber auf alle Fälle vor dem Ausführen dieses Scripts eine Datensicherung der DB machen!!! Ich übernehme keine Haftung, daß dieses Script sicher funzt. ;)

evtl. musst Du auch mit der Funktion set_time_limit(0) die Laufzeitbegrenzung für das Script ausschalten.

Das Script wird auf alle Fälle den Webserver erstmal "lahmlegen", also evtl. noch in der Schleife ein sleep(1) oder so einbauen.

Für weitere Fragen kannst Du mir ja eine Email oder eine PM schreiben.

Gruß
Dunsti
 
Wow, danke Dunsti! Ich probiere das Skript bei Gelegenheit aus, dh. nachdem ich ein DB-Backup gemacht habe ;) Es wird wahrscheinlich an das Limit von 6 Sekunden möglicher Rechenzeit stossen, aber warten wir es einfach mal ab :)
 
wenn Du auf einem "lokalen" Rechner ein WAMP-System (oder auch LAMP) hast kannst Du ja da mit dem Backup rumprobieren.
Wenns da klappt kannst Du ja auch das geänderte Backup hochladen und vorher die Online-DB löschen (ACHTUNG: Datenverlust möglich !!!)

Hätte auf alle Fälle den Vorteil, daß Du den Webserver nicht "lahmlegst" ;)

Gruß
Dunsti
 
Zurück