MySQL: Alles bis auf die ersten x Einträge löschen.
AllesMeins
- datenbank
Hi,
ich möchte in einer MySQL Tabelle sicherstellen, dass zu einem Benutzer nicht mehr als X Einträge in der Tabelle stehen. Mein Ansatz wäre also die Einträge nach der Spalte Datum zu sortieren und dann alles bis auf die ersten 4 zu löschen (bzw. alternativ umgekehrt nach Datum sortieren und alles bis auf die letzten 4 löschen). Leider mag das scheinbar nicht so wie ich mir das vorstelle. Ein
"DELETE FROM <TABLE> WHERE user = "123" ORDER BY time DESC LIMIT 4,99999"
wirft leider einen fehler (Error in Syntax, ich soll bei "99999" checken - ohne die ,9999 funktioniert es, nur macht es dann nicht das was es soll).
Kann ich irgendwie direkt löschen oder muss ich den Umweg über "Erst Zeilen gesamt zählen und dann entsprechend löschen" gehen?
Grüße
Marc
Hell-O!
"DELETE FROM <TABLE> WHERE user = "123" ORDER BY time DESC LIMIT 4,99999"
Bei DELETE-Statements kannst du für LIMIT nur die Anzahl Zeilen angeben, die gelöscht werden sollen - anders als bei SELECT-Statements.
Kann ich irgendwie direkt löschen oder muss ich den Umweg über "Erst Zeilen gesamt zählen und dann entsprechend löschen" gehen?
Sollte deine MySQL-Version wenigstens 5.0 sein, könnten Subqueries die Lösung sein.
Siechfred
Hallo
[...] wichtige und richtige Hinweise [...]
Kann ich irgendwie direkt löschen oder muss ich den Umweg über "Erst Zeilen gesamt zählen und dann entsprechend löschen" gehen?
Sollte deine MySQL-Version wenigstens 5.0 sein, könnten Subqueries die Lösung sein.
Hmm, das Handbuch sagt in der letzten Zeile vor den Benutzerkommentaren:
"Currently, you cannot delete from a table and select from the same table in a subquery."
Mit einer Stored Procedure sollte das Problem mit MySQL 5.0 (und neuer) zu lösen sein.
Freundliche Grüße
Vinzenz