AllesMeins: MySQL: Alles bis auf die ersten x Einträge löschen.

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

  1. 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

    --
    Ich bin strenggenommen auch nur interessierter Laie. (molily)
    Siechfreds Tagebuch || Falle Aufteilungsbescheid || RT 221 Erfurt-Altstadt i.V.
    1. 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