MySQL-Spezialisten: Löschen Sie alle Zeilen, die älter als x Tage sind, aber nicht die letzten

8

Zunächst ist dies die Abfrage, die die "Spielergeschichte" erstellt es kann beliebig oft ausgeführt werden und es werden nur neue History-Zeilen für die Spieler erstellt, wenn für gestern keine History-Zeile vorhanden ist oder wenn sich die Werte seit dem letzten History-Eintrag in der Vergangenheit geändert haben.

%Vor%

Jetzt ist das Problem, ich möchte auch die Geschichte Tabelle mit einer einzigen Abfrage aufräumen. Dies wählt bereits alle historischen Einträge aus, die älter als 10 Tage sind, aber die neuesten. aber ich kann genau wie DELETE statt SELECT * tun.

%Vor%

Also ist es eine Möglichkeit, mit einer einzigen Löschabfrage zu tun, was ich will?

    
Andreas Linden 13.10.2010, 21:11
quelle

2 Antworten

9

Ihre Abfrage sieht in meinen Augen richtig aus, aber Sie haben nicht das Intervall in der Unterabfrage.

Ich würde das tun:

%Vor%

Was ist die Fehlermeldung von mysql?

    
Jürgen Steinblock 13.10.2010, 21:21
quelle
1

Wahrscheinlich können Sie dies nicht in einer einzelnen Abfrage tun, weil die Dokumentation angibt :

  

Derzeit können Sie nicht aus einer Tabelle löschen und in einer Unterabfrage aus derselben Tabelle auswählen.

Um dieses Problem zu umgehen, können Sie die IDs der Zeilen auswählen, die in eine temporäre Tabelle gelöscht werden müssen. Anschließend können Sie mithilfe einer Löschanweisung für mehrere Tabellen die Datensätze aus der ursprünglichen Tabelle löschen.

    
Mark Byers 13.10.2010 21:31
quelle

Tags und Links