suit: ID´s aus SQL Filtern und löschen.

Beitrag lesen

Also das funktioniert mit dem code von oben so wie gewollt. Auch ein 2tes und 3tes mal.

Ja, solange du aufeinanderfolgende, nummerische Identifikationsmerkmale hast und niemals zwischen drinnen einen Datensatz aus anderen Gründen entfernst oder in der Nummernabfolge eine Lücke erzeugt wird. Wenn du z.B. die neueren Datensätze aufgrund eines Timestamps ermittelst (z.B. letzte Änderung), ist dein System bereits zum scheitern verurteilt.

Aber wenn ich nen Denkfehler hab erklär ihn mir mal bitte einer. :)

Der Denkfehler ist, dass du von der höchsten ID einfach 10 abziehst. Du müsstest entweder den Zeiger des Datenbankobjekts verschieben (ich weiss aber nicht, ob das überhaupt mit PHP/MySQL geht) oder eben gleich den zehnten Datensatz abfragen. Zudem bleiben dir so immer 11 Datensätze, nicht 10 :)

Angenommen du hast folgendes:

id | title
---+------
1  | foo
2  | foo
3  | foo
4  | foo
5  | foo
6  | foo
7  | foo
8  | foo
9  | foo
10 | foo
11 | foo
12 | foo
13 | foo
14 | foo
15 | foo
16 | foo
17 | foo
18 | foo
19 | foo

Jetzt erhältst du mit der ersten Abfrage "20" zurück, ziehst davon 10 ab und löscht alles < 9 - bis auf die 11- statt 10-Sache ist alles in Ordnung.

Jetzt mit dieser Tabelle

id | title
---+------
1  | foo
2  | foo
3  | foo
4  | foo
5  | foo
6  | foo
7  | foo
9  | foo
11 | foo
13 | foo
14 | foo
15 | foo
20 | foo
25 | foo
30 | foo
35 | foo
40 | foo
45 | foo
50 | foo

Du erhältst jetzt 50 zurück, ziehst davon 10 ab und löscht alles < 40 - somit bleiben dir nur noch 3 Datensätze übrig.

Genau aus dem Grund musst du dir den 10. _Datensatz_ von unten holen und alles < dem Ergebnis löschen. Im ersten Beispiel wäre das ID 10, im 2. Beispiel ist das ID 13.

Das mit Subquerys hab ich noch nie gemacht. Schau ich mir aber mal an.

Funktioniert in diesem Fall mit MySQL nicht, war eine Wissenslücke von mir :).