URL: https://www.overclockers.at/coding-stuff/sql_anzahl_der_datensaetze_begrenzen_212344/page_1 - zur Vollversion wechseln!
hallo leute
ich hab halbwegs wenig ahnung von sql, und hätte da eine Frage an euch:
und zwar möchte ich die Anzahl der Datensätze einer Tabelle begrenzen.
also wenn ich eine Gewisse Anzahl an Einträgen erreicht ist soll er den Ältesten überschreiben.
gibts da einen komfortablen Weg über Phpmyadmin oder is gscheiter wenn ich das direkt im php code implementier.
tia, timmää
darf ich fragen, warum du das willst?
//und um welche DB gehts überhaupt? mysql?///weiters: warum nicht in der applikation lösen? steht eh zur debatte.
was versprichst du dir davon, nur mal am rande gefragt?
es kommen alle paar minuten Einträge hinzu und ich brauch immer nur ca. die letzten 100 zur weiteren Aufbereitung mittels php
jep geht um mysql
naja, dann hol einfach mit php nur die letzten 100 raus? oder überseh ich was?
hab ich auch schon überlegt nur wird das ding nach einiger Zeit riesig, was ich damit eigentlich vermeiden wollte
mein workaround wäre jetzt ein DELETE nach jedem SELECT aber ich bin noch am suchen.
kannst ja hin und wieder reinigen..
warum auch immer du das machen willst - es sollte mit einem trigger möglich sein.
Vielleicht sollten solche Wegwerf-Datensätze gar nicht in eine Datenbank.
ok ... hört sich gut an ..
*hust* .. habe jetzt mal nachgerechnet ... wird sich warscheinlich eh ewig ausgehen ^^"
t'schuldigung ... aber müsste das eine Datenbank nicht können?
aber egal .. thx für die schnelle Hilfe!
timmää
warum sollte eine DB so was wie Log-Rotation für Daten können? Normalerweise will man Daten "ewig" speichern und falls nicht, kann man sie ja löschen.
Du willst einen Ringbuffer. Eine relationale Datenbank ist kein Ringbuffer - was aber nicht heiszt, dass man sie nicht zur Implementierung eines solchen missbrauchen kann.
→ http://en.wikipedia.org/wiki/Rrdtool koennte vielleicht interessant fuer dich sein.
Ein DBMS könnte sowas können, muss aber nicht sein. Vielleicht gibt es welche die solche Features haben, bei MySQL bin ich mir aber ziemlich sicher dass das nicht der Fall ist. Normalerweise sind solche Systeme halt eher für das Permanente Speichern von Daten vorgesehen.Zitat von Timmääok ... hört sich gut an ..
*hust* .. habe jetzt mal nachgerechnet ... wird sich warscheinlich eh ewig ausgehen ^^"
t'schuldigung ... aber müsste das eine Datenbank nicht können?
aber egal .. thx für die schnelle Hilfe!
timmää
Zitat von kleinerChemikerwarum sollte eine DB so was wie Log-Rotation für Daten können? Normalerweise will man Daten "ewig" speichern und falls nicht, kann man sie ja löschen.
wenn count(*) >= 100 lösche ersten datensatz (select .. order by id asc limit 1)
insert...
…und schon hamma die Racecondition!
Für seine Anforderungen sollte es reichen
Verpackt ers halt in eine transaction..
Wenn schon 100 Einträge vorhanden sind, den ältesten löschen und den neuen einfügen. (wie Obermotz schon erwähnt hat)
einen trigger auf "after insert" geben und du musst dich aktiv nie wieder um etwas kümmern...
Herzlichsten Dank für die Vorschläge.
Unser aktueller Lösungsansatz ist wie semtex gesagt hat ein Trigger after insert und dann soll er den ersten löschen, allerdings arbeiten wir gerade daran diesen zu identifizieren, da wir keinen schlüssl ham.
edit: zugreifen können wir jetzt aber diese blöde Verzweigung will nicht funktionieren.
lg, timmää
naja, identifikation ist "einfach".... ein timestamp dazu, welches default wert "datum.now" hat (die genaue sql syntax müsst ich jetzt nachschaun)
und ja, trigger können durchaus "gefinkelt" sein
now() & über mysql?
also ich würde ums zu identifizieren mit einer sequence die von 1-100 geht einfügen als schlüssel, dann kannst du immer beim trigger den datensatz mit der aktuellen ID überschreiben. ist weniger arbeit für die DB und für dich (im vergleich zu daten sortieren oder maxen oder whatever)
musst ja auch erst abfragen obs die Nummer schon gibt.
Da wär die Methode: letztes löschen, neues eintragen glaub ich praktischer
Mit mysql kannst du das aber mit einem REPLACE INTO machen, da spart dir dann das vorher abfragen bzw. das löschen des Datensatzes.
REPLACE löscht aber auch den datensatz und erstellt einen neuen. da wäre dann update noch geschickter. aber man müßte dafür danna auch speichern, bei welcher nummer man gerade ist.
Für 100 Datensätze würde ich mir den Aufwand mit einer Datenbank überhaupt nicht antun und das Ganze in einem Textfile speichern. Bei jedem Update neu schreiben. Im Speicher ein Array halten. Fertig.
falls man auf dem server via php dateien schreiben/manipulieren darf.
Zitat von Nicofalls man auf dem server via php dateien schreiben/manipulieren darf.
ich würd auch einen spalte mit auto-timestamp hinzufügen und dann mit trigger mit DELET LOW_PRIORITY überzählige zeilen löschen.
Stoppt den Datenbank-Wahnsinn!
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025