2017-02-03 4 views
0

Ich erstelle ein Protokoll in der MySQL-Datenbank und ich muss nur die neuesten 100 Datensätze und löschen Sie die älteren. Ich habe die Lösung aus THIS Frage versucht, aber das scheint nicht für mich zu arbeiten.Wie lösche ich ältere Zeilen in MySQL?

meiner Datenbank-Tabelle hat die folgenden Spalten: Datumzeit Temp Feuchtigkeit pHWert

Ich will nicht den Zeitstempel-Methode verwenden, weil ich eine feste Anzahl von Datensätzen zu halten brauchen. kann dies in mysql getan werden?

Antwort

1

versuchen Sie dies:

Delete from table t 
where (Select count(*) from table 
     where datetime > t.DateTime) > 100 
1

Dies ist die Lösung.

DELETE FROM mytable WHERE id NOT IN (SELECT id FROM mytable ORDER BY id DESC LIMIT 100)

Inner select wählt alles außer neuesten 100 Datensätze (vorausgesetzt, id Autoinkrement) zur Verfügung und schließt sie in löschen, die nicht-Anweisung.

Sie können datetime anstelle von ID verwenden, wenn datetime in gültiger Reihenfolge ist.

+0

Meine Tabelle hat keine 'ID' Spalte. also kann ich diese Methode nicht wirklich benutzen. –

+0

Wie in der Antwort erwähnt: "Sie können auch datetime anstelle von ID verwenden, wenn datetime in gültiger Reihenfolge ist." – tilz0R

0

Wenn Sie Tabelle einen Primärschlüssel suppose p_id hat, dann können Sie folgende Abfrage verwenden

DELETE FROM my_table WHERE p_id NOT IN (SELECT p_id FROM my_table ORDER BY id DESC LIMIT 100); 
+0

Meine Tabelle hat keine primäre ID. Das habe ich in der Frage gesagt. –

+0

dann können Sie die Datetime-Spalte anstelle von ID verwenden, oder es wäre besser, wenn Sie einen Primärschlüssel zu der Tabelle für genauere Ergebnisse hinzufügen können. –

+0

Oh! ok .. danke ich werde das versuchen. –

0

Es gibt keine andere Spalte als Datumsfeld die ältesten Zeilen zu finden, aber Sie können die LIMIT-Klausel verwenden, um zu sagen wie viele Zeilen, die für die ältesten 100 Zeilen gelöscht werden müssen:

Verwandte Themen