SQL Anzahl der Datensätze begrenzen?

Seite 1 von 2 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/sql_anzahl_der_datensaetze_begrenzen_212344/page_1 - zur Vollversion wechseln!


Timmää schrieb am 02.12.2009 um 19:17

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ää


prayerslayer schrieb am 02.12.2009 um 19:22

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.


Nico schrieb am 02.12.2009 um 19:22

was versprichst du dir davon, nur mal am rande gefragt?


Timmää schrieb am 02.12.2009 um 19:26

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


prayerslayer schrieb am 02.12.2009 um 19:27

naja, dann hol einfach mit php nur die letzten 100 raus? oder überseh ich was?


Timmää schrieb am 02.12.2009 um 19:28

hab ich auch schon überlegt nur wird das ding nach einiger Zeit riesig, was ich damit eigentlich vermeiden wollte


prayerslayer schrieb am 02.12.2009 um 19:29

mein workaround wäre jetzt ein DELETE nach jedem SELECT :D aber ich bin noch am suchen.


Nico schrieb am 02.12.2009 um 19:29

kannst ja hin und wieder reinigen..


ica schrieb am 02.12.2009 um 19:37

warum auch immer du das machen willst - es sollte mit einem trigger möglich sein.


Vo schrieb am 02.12.2009 um 19:38

Vielleicht sollten solche Wegwerf-Datensätze gar nicht in eine Datenbank.


Timmää schrieb am 02.12.2009 um 19:40

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ää


kleinerChemiker schrieb am 02.12.2009 um 21:38

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.


COLOSSUS schrieb am 02.12.2009 um 21:49

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.


watchout schrieb am 03.12.2009 um 11:55

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ää
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.

Temporäre Daten hält man daher normalerweise im System im Speicher, in Tempfiles, oder wenn ein Server nicht ausreicht auf SHM Server(n).

Ich schätze es ist möglich für MySQL eine Storage Engine zu schreiben die genau das kann - aber ob der Aufwand lohnt ist halt die Frage ;)


rettich schrieb am 03.12.2009 um 14:05

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

geht, zB in oracle über named partitions. geht meines wissens nach erst ab oracle 11g


Obermotz schrieb am 04.12.2009 um 09:59

wenn count(*) >= 100 lösche ersten datensatz (select .. order by id asc limit 1)
insert...


COLOSSUS schrieb am 04.12.2009 um 10:06

…und schon hamma die Racecondition! :D


Obermotz schrieb am 04.12.2009 um 10:08

Für seine Anforderungen sollte es reichen ;)
Verpackt ers halt in eine transaction..


JDK schrieb am 08.12.2009 um 18:38

Wenn schon 100 Einträge vorhanden sind, den ältesten löschen und den neuen einfügen. (wie Obermotz schon erwähnt hat)


semteX schrieb am 08.12.2009 um 19:22

einen trigger auf "after insert" geben und du musst dich aktiv nie wieder um etwas kümmern...


Timmää schrieb am 09.12.2009 um 12:44

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ää


semteX schrieb am 10.12.2009 um 19:37

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 :D


fatmike182 schrieb am 11.12.2009 um 18:08

now() & über mysql?


UncleFucka schrieb am 15.12.2009 um 21:08

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)


fatmike182 schrieb am 16.12.2009 um 12:05

musst ja auch erst abfragen obs die Nummer schon gibt.
Da wär die Methode: letztes löschen, neues eintragen glaub ich praktischer


Triple-X schrieb am 16.12.2009 um 19:37

Mit mysql kannst du das aber mit einem REPLACE INTO machen, da spart dir dann das vorher abfragen bzw. das löschen des Datensatzes.


kleinerChemiker schrieb am 16.12.2009 um 19:55

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.


that schrieb am 16.12.2009 um 22:08

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.


Nico schrieb am 16.12.2009 um 22:15

falls man auf dem server via php dateien schreiben/manipulieren darf.


COLOSSUS schrieb am 16.12.2009 um 22:20

Zitat von Nico
falls man auf dem server via php dateien schreiben/manipulieren darf.

Wenn nicht, darf man ja immer noch eine bessere Sprache verwenden! :)


kleinerChemiker schrieb am 16.12.2009 um 22:27

ich würd auch einen spalte mit auto-timestamp hinzufügen und dann mit trigger mit DELET LOW_PRIORITY überzählige zeilen löschen.


Vo schrieb am 16.12.2009 um 22:44

Stoppt den Datenbank-Wahnsinn!




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025