![]() |
[PHP/MySQL] Anzahl der Datensätze begrenzen
Moins,
wie kann ich in einer MySQL-Tabelle die Anzahl der Datensätze begrenzen? Es geht speziell darum, dass ich eine Tabelle hab, die relativ schnell sehr groß wird (die Tabelle wird zum Loggen von verschiedenen Ereignissen benutzt, und wächst so sehr schnell). Es soll, sobald eine bestimmte Anzahl von Tabellenreihen erreicht ist, der älteste Eintrag (alles sortiert nach Datum) gelöscht werden... Wie mach ich das am besten? |
Re: [PHP/MySQL] Anzahl der Datensätze begrenzen
LIMIT
|
Re: [PHP/MySQL] Anzahl der Datensätze begrenzen
Untersützt dein MySQL Trigger? (Tut das überhaupt eine Version? :gruebel:)
Wenn ja, platzier einen BEFORE INSERT-Trigger mit dem entsprechenden Delete-Kommande, wenn "SELECT Count(ID) FROM table > irgendwas" ist.. Ansonsten musst du separate Statements schicken. |
Re: [PHP/MySQL] Anzahl der Datensätze begrenzen
Zitat:
Wenn es funktioniert... wie lösch ich dabei immer den ältesten Eintrag (= den mit dem niedrigsten Date-Wert)? Es soll ja nicht irgendeiner gelöscht werden... Zitat:
|
Re: [PHP/MySQL] Anzahl der Datensätze begrenzen
Ich würde auch mittels COUNT die Anzahl der Datensätze ermitteln und anschließend ggf. ein weiteres Query mittels DELETE foo WHERE timestamp ... ausführen.
LIMIT bringt nur dann etwas, wenn du eine begranzte Anzahl an Datensätzen auslesen möchtest. |
Re: [PHP/MySQL] Anzahl der Datensätze begrenzen
Zitat:
|
Re: [PHP/MySQL] Anzahl der Datensätze begrenzen
Zitat:
|
Re: [PHP/MySQL] Anzahl der Datensätze begrenzen
MIN()
|
DP-Maintenance
Dieses Thema wurde von "alcaeus" von "Programmieren allgemein" nach "Datenbanken" verschoben.
Auch wenn der Zugriff ueber PHP erfolgt, es geht immer noch um Datenbanken ;) |
Re: [PHP/MySQL] Anzahl der Datensätze begrenzen
Ich würde es so machen:
Einfügen des Logs Nachschauen wie viele Datensätze vorhanden sind Überflüssige löschen Löschen geht mit: Herausfinden welcher der letzte Eintrag ist welcher bleiben soll: SELECT id,timestamp FROM datenbank WHERE 1 ORDER BY timestamp DESC LIMIT x,1 // x ist die Anzahl wie viele Maximal da sein sollen dann hast du die ID und den Timestamp vom letzten und kannst alle löschen wo der Timestamp kleiner ist als der. Ich hoffe, das klappt so :oops: ist nämlich nur eine grobe Überlegung gewesen Flare |
Re: [PHP/MySQL] Anzahl der Datensätze begrenzen
Zitat:
|
Re: [PHP/MySQL] Anzahl der Datensätze begrenzen
Ich hatte bei mir ein ähnliches problem und habe das so gelöst, dass ich gesagt habe, dass Logs, die älter als 4 Monate gelöscht werden.
Du kannst natürlich auch nach Anzahl gehen:
SQL-Code:
löscht die x ältesten Logs.
DELETE FROM tabelle ORDER BY timestamp LIMIT x
Um rauszufinden wieviele du löschen willst, könntest du so vorgehen:
SQL-Code:
Gibt dir die Anzahl vorhandener Datensätze. Dann könntest du einfach sagen, dass maximal y Logs in der tabelle sein sollten und dann x wär dann y-COUNT(*).
SELECT COUNT(*) FROM tabelle
Oder du könntest einfach bei jedem einfügen eines Logeintargs den ältesten löschen (mit x=1). Um dennoch zu garantieren, dass zumindest eine bestimmte Anzahl Logs in der Tabelle sind, kannst du entweder am Anfang ganz viele leere dummy-Datensätze in die Tabelle speichern, oder eine Zeitliche Begrentzung einbauen:
SQL-Code:
Dieser Query löscht dann wieder den ältesten Eintrag. Aber nur, wenn dieser mindestens 30 Tage alt ist.
DELETE FROM tabelle WHERE timestamp<UNIX_TIMESTAMP()-60*60*24*30 ORDER BY timestamp LIMIT 1
Um das ganze Performancemässig noch etwas zu tunen, kannst du bei jedem neuen Logeintrag überprüfen, welche ID dieser bekommen hat (vorausgesetzt du hast einen primary-key mit auto inkrement) und wenn dieser dann beispielsweise durch 1000 teilbar ist, dann löschst du gleich die letzten 1000 Einträge. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz