Hello,
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.
Schade, dass Du mich gar nicht verstehen willst.
DELETE from $table where timestamp_col < $timestamp limit 30;
Das war der ursprüngliche Ansatz. Ich habe nur das "order by" herausgenommen, weil MySQL DAS nicht unterstützt. Das "limit 30" wird aber sehr wohl unterstützt. Und nun wiederhole ich meine Aussage von oben:
"limit 30" nützt in diesem Statement mit der gegebenen Aufgabenstellung aber nichts, da ja
1. nicht 30 Sätze gelöscht werden sollten, sondern übrig bleiben sollten
2. man bei "limit 30" nicht genau weiß, welche Sätze gelöscht werden,
da das "order by" in DELETE nicht funktioniert.
Man kann in dynamischen Datenbeständen mit MySQL also meistens nur mit einer zweistufigen Technik arbeiten. 1. Stufe = Selektieren und externes Merken von Primaries, 2. Stufe Durchführung der eigentlichen Aktion. Das kann dann bei großen Datenbeständen beliebig kompliziert werden, damit die Operation überhaupt über PHP durchführbar ist und kann auch das Locking von Tabellen erforderlich machen. Da in der Praxis aber meistens keine einheitlichen Zugriffsmethoden vorhanden sind, kann man das mit dem Locking vergessen, da es nur advisory ("softlock") ist und nicht mandatory ("hardlock").
Grüße aus http://www.braunschweig.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen