yo,
Das sorgt nämlich dafür, dass nur 30 Sätze gelöscht werden. Leider weiß man nicht welche, da es ja noch kein "Order by" bei "Delete" gibt.
nein, es werden alle datensätze gelöscht, die ein kleineren timestamp haben. damit ist nichts über die anzahl der datensätze gesagt. es können 0, 100 oder 10.000 gelöscht werden.
Bei Deiner Methode ist nicht sichergestellt, dass nicht dopplete Timestamps vorhanden sind. Mal verkürt dargestellt:
gleiche timestamps haben keinen negativen einfluss auf die methode, da nichts weiter spezifiziert wurde.
Nun sollen die neuesten 6 Sätze erhalten bleiben.
Nach deiner Methode würde dafür alles gelöscht werden, was einen Timestamp < 249 hat. Also bleiben die Sätze 1-8 übrig. Das sind aber 8.
erstens trifft das problem nur auf, wenn es mehrere datensätze mit den gleichen timestamp bei der untergrenze gibt, was es weiter unwahrscheilich macht. und zum anderen ist nicht weiter spezifiziert, wie bei gleicheit vorgegangen werden soll. gibt es mehrere davon, könnte zum beispiel die laufende nummer mit rangezogen werden, um eine auswhl bei gleichen timestamps zu treffen. dies ist aber nicht geschehen und somit können gleiche datensätze auch nicht weiter unterschieden werden und müssen sogar bestehen bleiben.
Da man eine bessere Lösung mit ein wenig mehr Nachdenken programmieren kann, halte ich sie auch nicht für zu kompliziert. Faulheit führt immer zu schlechten Programmen.
nein, das problem wird vollständig gelöst. sollte auch die gleichheit erfasst werden, kann man dies ebenfalls erreichen, ohne eine komplette liste mit ids zu speichern. ist es egal, welchen der datensätze mit gleichen timestamp man behält, löscht man im zweiten schritt beim delete alle die kleiner sind und alle datensätze mit dem gleichen timestamp (untergrenze) bis auf einem (WHERE spalte1 < ×tamp OR spalte1=$timestamp AND spalte_ID <> $id). und dann bekommt man in deinem besipiel auch auf 6 datensätze raus.
Ilja