[MySQL/PHP] Beiträge in einer DB löschen (bis auf einen)
-
Hi!
Wie kann ich folgendes realisieren?
Ich möchte in meiner DB alle Einträge,bis auf den neuesten löschen.
Ich habe es bereits mit einer while schleife probiert, aber das führte zu einer endlosschleife:
<?php function entryguard($pagetype) { if ($pagetype=="settings") { $table = DB_SETTINGS; } elseif ($pagetype=="meta") { $table = DB_METATAGS; } $count_entries = mysql_query("Select count(*) as number from ".$table.""); $data = mysql_fetch_array($count_entries); while ($data != 1) { $reduce = mysql_query("DELETE FROM ".$table." WHERE id>'1'"); } }
-
Hast du ein auto-increment feld, oder ein datum? Oder anders: wie bestimmst du den neusten Eintrag? Dann kannst du einfach diese Eigenschaft auslesen und denn alle Einträge bis auf diesen mit einem einzigen SQL-Befehl (über WHERE) löschen.
Zu deinem Code: $data wird doch nachher nicht mehr verändert, dann ist es doch klar, dass das eine Endlosschleife gibt
-
Auslesen des letzten timestamps.
SELECT timestamp from tabelle ORDER BY timesatmp ASC LIMIT 1
Jetzt hast du den Zeitwert
Delete mit
DELETE from tabelle where timestamp < wertvonoben.
Damit werden alle eintröge gelöscht deren timestampfeld kleiner als der übergeben wert sind.
Solltest du keinen Timesatmp haben dann hast du ein Problem. In einer RDBMS werden die Daten immer an das Datenbankfile unter angereiht. Bei einer Abfrage kannst du dir aber nicht sicher sein das du sie in der Reihenfolge bekommst.
-
Ich habe ein auto-increment Feld. Der Code von Unix-Tom ist super!
Hier mein überarbeiteter Code. Wie gesagt funktioniert super!function entryguard($pagetype) { if ($pagetype=="settings") { $table = DB_SETTINGS; } elseif ($pagetype=="meta") { $table = DB_METATAGS; } $select = mysql_query("SELECT id FROM ".$table." ORDER BY id DESC LIMIT 1"); $id_number = mysql_fetch_array($select); $delete_all = mysql_query("DELETE FROM ".$table." WHERE id < ".$id_number['id'].""); }