datensatz löschen

Hab da noch ein Scenario:

PHP:
$SQL = "DELETE FROM content_links_count WHERE timestamp < '".$time_search."'";
mysql_db_query($dkf_db, $SQL, $dkf_cid) or die ("MySQL-Error: ".mysql_error());
print mysql_affected_rows().' Datensätze wurden gelöscht!';

PHP:
$delete_count = 0;
$SQL = "SELECT * FROM content_filemanager";
$query = mysql_db_query($dkf_db, $SQL, $dkf_cid) or die ("MySQL-Error: ".mysql_error());
while ($row = mysql_fetch_assoc($query))
	{
		if(!file_exists($hidden_dir.$row['filename']))
			{
				$delete_count++;
				$SQL = "DELETE FROM content_filemanager WHERE id = '".$row['id']."' LIMIT 1";
				mysql_db_query($dkf_db, $SQL, $dkf_cid) or die ("MySQL-Error: ".mysql_error());
			}
	}
print $delete_count.' Datensätze wurden gelöscht!';

Meinen ersten PHP-Block konnte ich ja schon optimieren, aber gibt es noch eine Möglichkeit für den 2.?
Ich prüfe, ob eine Datei noch vorhanden ist, dessen Link in der Datenbank steht. Wenn nicht, wird der Datenbankeintrag gelöscht.
 
Zuletzt bearbeitet:
Probier mal Folgendes:
PHP:
<?php

	…

	$records = array();
	$query = '
		SELECT
		        `id`,
		        `filename`
		  FROM
		        `content_filemanager`
		';
	$result = mysql_db_query($dkf_db, $query, $dkf_cid)
		or die('MySQL-Error: '.mysql_error());
	while( $row = mysql_fetch_assoc($query) ) {
		if( !file_exists($hidden_dir.$row['filename']) ) {
			$records[] = $row['id'];
		}
	}
	if( !empty($records) ) {
		$query = '
			DELETE FROM
			        `content_filemanager`
			  WHERE
			        `id` = "' . implode('" OR `id` = "', $records) . '"
			';
		$result = mysql_db_query($dkf_db, $query, $dkf_cid)
			or die('MySQL-Error: '.mysql_error());
		}
	}
	echo mysql_affected_rows($result).' Datensätze wurden gelöscht!';

?>
 
Wenn ich das richtig interpretiere, werden die zu löschenden IDs in ein Array geschrieben. Im 2. Schritt werden dann die IDs aus dem Array gelöscht.
Ist es dann nicht sinnvoller, den Befehl mysql_affected_rows() zu nutzen und nicht die Größe des Arrays auszugeben? Nur so bekomme ich doch die direkte Rückmeldung der Datenbank, oder?
Und wieso schlägst du diese Möglichkeit vor? Ist sie effizienter, schneller, was auch immer?
 
Mein Vorschlag benötigt im Gegensatz zu deinem nur zwei Datenbankabfragen – egal wie viele Datensätze gelöscht werden sollen. Ob dies einen Vorteil hat, kannst du dir selbst ausmalen.
 
Zurück