Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP/MySQL] Anzahl der Datensätze begrenzen (https://www.delphipraxis.net/79841-%5Bphp-mysql%5D-anzahl-der-datensaetze-begrenzen.html)

malo 29. Okt 2006 18:30


[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?

mkinzler 29. Okt 2006 18:31

Re: [PHP/MySQL] Anzahl der Datensätze begrenzen
 
LIMIT

Dax 29. Okt 2006 18:36

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.

malo 29. Okt 2006 18:46

Re: [PHP/MySQL] Anzahl der Datensätze begrenzen
 
Zitat:

Zitat von mkinzler
LIMIT

Kann man damit die Anzahl der Datensätze in der Tabelle begrenzen? Ich dachte immer, damit kann man nur begrenzen wieviele man auslesen will :gruebel:
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:

Zitat von Dax
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.

Wie geht das im Einzelnen? Ich kenn mich leider nicht so gut mit MySQL aus :(

Matze 29. Okt 2006 18:47

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.

mkinzler 29. Okt 2006 18:48

Re: [PHP/MySQL] Anzahl der Datensätze begrenzen
 
Zitat:

mkinzler hat folgendes geschrieben:
LIMIT


Kann man damit die Anzahl der Datensätze in der Tabelle begrenzen? Ich dachte immer, damit kann man nur begrenzen wieviele man auslesen will Grübelnd...
Hatte die Frage falsch verstanden.

malo 29. Okt 2006 18:51

Re: [PHP/MySQL] Anzahl der Datensätze begrenzen
 
Zitat:

Zitat von Matze
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.

Sowas dachte ich mir auch, aber wie ermittle ich den niedrigsten Datewert?

mkinzler 29. Okt 2006 18:52

Re: [PHP/MySQL] Anzahl der Datensätze begrenzen
 
MIN()

DP-Maintenance 29. Okt 2006 18:58

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 ;)

Flare 29. Okt 2006 19:09

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

malo 29. Okt 2006 19:21

Re: [PHP/MySQL] Anzahl der Datensätze begrenzen
 
Zitat:

Zitat von Matze
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.

Ich habs jetzt so gemacht, und klappt auch, danke ;)

yankee 29. Okt 2006 19:27

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:
DELETE FROM tabelle ORDER BY timestamp LIMIT x
löscht die x ältesten Logs.
Um rauszufinden wieviele du löschen willst, könntest du so vorgehen:
SQL-Code:
SELECT COUNT(*) FROM tabelle
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(*).
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:
DELETE FROM tabelle WHERE timestamp<UNIX_TIMESTAMP()-60*60*24*30 ORDER BY timestamp LIMIT 1
Dieser Query löscht dann wieder den ältesten Eintrag. Aber nur, wenn dieser mindestens 30 Tage alt ist.

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