Tom: Neusten einträge behalten ?

Beitrag lesen

Hello,

theoretisch ist das eine unterabfrage. das problem ist, das mysql unterabfragen höchst wahrscheinlich nicht akzeptiert.

Sieht leider ungefähr so aus. DELETE akzeptiert kein ORDER BY

deshalb könnte man es in zwei schritten lösen. erst eine select anweisung, die das datum des 30. datensatz ermittelt und dann alles löscht, was älter als dieses datum ist.

  1. SELECT MIN(timestamp_spalte) FROM test ORDER BY timestamp_spalte ASC LIMIT 30;

  2. DELETE FROM test WHERE timestamp_spalte < ergebnis__abfrage;

Und Andreas will ja auch 30 Sätze behalten und nicht 30 Sätze löschen. Das LIMIT 30 würde aber die Löschung auf 30 Sätze beschränken und nicht den Rest.

Ich sehe da momentan nur die Möglichkeit, sich mit einem SELECT die IDs der Sätze zu besorgen, die manh behalten will, diese dann in das Löschquery in eine "WHERE ID NOT IN($liste)" Klausel zu packen.

Die Liste ist einfach eine durch Komma getrennte Liste der IDs.

Da bleibt in dynamischen Datenbeständen nur noch das Problem, dass zwischen dem Select und dem Delete frische Sätze hinzukommen könnten, die dann auch mit weg wären. Das kann man dann wahrscheinlich nur nach Deiner Methode der vorherigen Grenzbestimmung machen. Da Timestamp sehr grob ist (es könnten durchaus mehrere Sätze den gleichen Timestamp haben) könnten vielleicht beide Methoden zusammen den gewünschten Erfolg bringen.

Zum Glück muss man es ja nur einmal vernünftig programmieren und dann funktionierts bis in alle Ewigkeit ;-)

Liebe Grüße aus http://www.braunschweig.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen