Ich habe Logdateien(csv) in eine Datenbank eingelesen und mir eine kleine PHP-Seite drumrum gebastelt, um die Daten auswerten zu können. Das funktioniert auch alles soweit, nur möchte ich gerne nachträglich Daten ändern. Es handelt sich um die Zugriffe auf einen Datenserver und in einer Tabellenspalte sind die Pfade der Dateien. Der Anfang der Pfade, der bei fast allen Dateien gleich ist, soll einfach nur gelöscht werden. Das habe ich auch folgendermaßen gelöst:
$suchen = $sql->prepare("SELECT id, datei FROM log_tabelle WHERE `datei` LIKE '%riesenlanger_Pfad_der_fast_ueberall_gleich ist%' ;") ; $korrektur = $sql->prepare("UPDATE log_tabelle SET datei = :inhalt WHERE id = :id ;") ; $suchen->execute(); while($daten = $suchen->fetch()) { $id[] = $daten['id']; $inhalt[] = $daten['datei']; } for ($i=0; $i<count($id); $i++) { $inhalt = str_ireplace('riesenlanger_Pfad_der_fast_ueberall_gleich ist', '', $inhalt[$i]) ; $korrektur->bindParam(':inhalt', $inhalt); $korrektur->bindParam(':id', $id[$i]); $korrektur->execute(); }
Das funktioniert auch (falls da Fehler in der Syntax sind, die sind nur versehentlich, weil ich das Ganze für hier ein wenig vereinfacht habe) aber es ist sehr zeitaufwändig, da es auch eine knappe Million Einträge sind.
Gibt es da vielleicht einen schnelleren Weg? Manchmal schreibt man ja sowas umständlich und dann gibt es einen einzigen Befehl, der das in fünf Minuten mit einmal macht.