Beitrag von Helmut Meisl (119 Beiträge) am Samstag, 21.November.2009, 00:46.
Löschen ältester Datensätze
Kann mir jemand einen Tipp geben, wie ich auf einfache Art und Weise in einer Datenbank die Anzahl der Datensätze auf 9999 begrenzen kann und jeweils die ältesten Datensätze gelöscht werden. Ich hab´s mit do action und del probiert, aber so einfach geht es doch nicht, da del wohl nicht zulässig ist. DANKE!
Antworten
Beitrag von richard (1187 Beiträge) am Samstag, 21.November.2009, 08:16. WWW: posaunenchor-rhoden.de
Re: Löschen ältester Datensätze
Eine Möglichkeit könnte so aussehen:
Du holst zunächst mal die Anzahl der vorhandenen Datensätze mit $_amount_all. Dann läßt Du den Überhang (Ergebnis von $_amount_all - 9999) in einer Schleife mit get oder loop ausgeben, (Begrenzung der Ausgabe durch: range=-AnzahlÜberhang,AnzahlÜberhang). Dabei kannst du dann die ausgegebenen Datensätze mit del über die Id löschen.
Wenn ich Ausgabe schreibe muß das nicht unbedingt eine am Bildschirm erkennbare Ausgabe sein, es reicht wenn die Schleife durchläuft und der jeweils aktuelle Datensatz gelöscht wird.
Diese Lösung bietet aber die Möglichkeit die gelöschten Datensätze noch einmal am Bildschirm auszugeben, Sicherungs- oder Erinnerungskopien in einer Datenbank oder Textdatei zu speichern.
Antworten
Beitrag von richard (1187 Beiträge) am Samstag, 21.November.2009, 08:33. WWW: posaunenchor-rhoden.de
Re: Re: Löschen ältester Datensätze
Sorry, habe bei der Range Angabe Unsinn geschrieben.
Statt range=-AnzahlÜberhang,AnzahlÜberhang ist wohl
range=-Ergebnisvon$_amount_all,AnzahlÜberhang
richtig.
Antworten
Beitrag von richard (1187 Beiträge) am Samstag, 21.November.2009, 08:39. WWW: posaunenchor-rhoden.de
Re: Re: Re: Löschen ältester Datensätze
Wenn ichs mir mir richtig überlege sollte die erste Fassung doch die bessere sein.
Nebenbei. Habe mit diesem Post jetzt die 500er Marke zum wiederholten Male geknackt - war schon mal über 600. Dieses Zählwerk hier macht mir schon ein bißchen Sorgen hinsichtlich der Zuverlässigkeit von bp.
Antworten
Beitrag von Sander (8133 Beiträge) am Montag, 30.November.2009, 13:48.
Re: Re: Re: Re: Löschen ältester Datensätze
so, nach einem reorg der forumdb hast du 506 beiträge ;) - vielleicht wurden früher die großgeschriebenen Richards mitgezählt
Antworten
Beitrag von richard (1187 Beiträge) am Montag, 30.November.2009, 14:27. WWW: posaunenchor-rhoden.de
Re: Re: Re: Re: Re: Löschen ältester Datensätze
Gleich mal ausprobieren.
Mein Problem dabei war, daß die angezeigte Anzahl über die Monate/Jahre mehrmals rauf und runter ging - das kann nicht nur an der Schreibweise liegen. Es soll Auswertungen geben wo man solche statistischen Werte einsetzt, die sollten dann schon verläßlich sein.
Antworten
Beitrag von Sander (8133 Beiträge) am Montag, 30.November.2009, 15:59.
Re: Re: Re: Re: Re: Re: Löschen ältester Datensätze
tja, ich kann dir nur sagen, wie die abfrage drin steht:
in der direkten Suche in der DB erhalte ich das gleiche Ergebnis.
692 sinds, wenn groß/klein nicht berücksichtigt wird.
Antworten
Beitrag von Claus (4645 Beiträge) am Montag, 30.November.2009, 19:06.
Re: Re: Re: Re: Re: Re: Löschen ältester Datensätze
Ihr habt Probleme...;)
Wenn da bei mir nicht plötzlich nur noch die Hälfte steht, sondern +- 50, ist mir das wurscht, schließlich zählt doch die Qualität und nicht die Quantität allein.
Wenn es um die Anzahl der Beiträge geht, könnte ich ja auch lamentieren, das ca 30 - 50 Beiträge nicht mitgezählt wurden, die ich ganz am Anfang mit kompletten Namen eingestellt hatte, ganz abgesehen von den zig Beiträgen im englischen Forum, die hier überhaupt nicht in die "Wertung" einfließen...;)
Auch wenn es einen gewissen Aufschluß darüber gibt, wie sich hier einzelne user engagieren, ich finde die Statistik auf der Startseite (die immer noch nicht funktioniert) und die Aktualisierung der Links in der Nutzerdatenbank sind wesentlich wichtiger...
Nichts für ungut
Gruesse
Claus
Antworten
Beitrag von Sander (8133 Beiträge) am Montag, 30.November.2009, 20:41.
Re: Re: Re: Re: Re: Re: Re: Löschen ältester Datensätze
ach shit, da bin ich ja letztens stehen geblieben... 1000de Baustellen... ;)
Antworten
Beitrag von richard (1187 Beiträge) am Montag, 30.November.2009, 20:44. WWW: posaunenchor-rhoden.de
Re: Re: Re: Re: Re: Re: Löschen ältester Datensätze
Mir ist die angezeigte Anzahl von Beiträgen auf meine Rechnung egal. Wenn es anders wäre könnte ich ja regelmäßig dummes Zeug schreiben oder zu jedem Post von mir noch zwei oder drei Ergänzungsposts machen.
Darum ging es mir nicht.
Antworten
Beitrag von Claus (4645 Beiträge) am Dienstag, 1.Dezember.2009, 11:48.
Re: Re: Re: Re: Re: Re: Re: Löschen ältester Datensätze
Antworten
Beitrag von richard (1187 Beiträge) am Dienstag, 1.Dezember.2009, 13:14. WWW: posaunenchor-rhoden.de
Re: Re: Re: Re: Re: Re: Re: Löschen ältester Datensätze
Wem der Schuh paßt, der zieht ihn sich an.
Hast mein eigentliches Anliegen aber offensichtlich immer noch nicht erkannt.
Antworten
Beitrag von Sander (8133 Beiträge) am Dienstag, 1.Dezember.2009, 13:22.
Re: Re: Re: Re: Re: Re: Re: Re: Löschen ältester Datensätze
Antworten
Beitrag von Claus (4645 Beiträge) am Dienstag, 1.Dezember.2009, 13:34.
Re: Re: Re: Re: Re: Re: Re: Re: Löschen ältester Datensätze
daher ja auch Dein entsprechender Kommentar...;)
Wie gesagt, es gibt sicherlich wichtigere Dinge, als irgendwelche Statistiken *sfg*
Mich amüsiert sowas mittlerweile nur noch, da ich genug zu tun habe...
Gruesse
Claus
Antworten
Beitrag von taubenuss (2 Beiträge) am Mittwoch, 2.Dezember.2009, 11:30.
Re: Re: Re: Re: Re: Re: Re: Re: Löschen ältester Datensätze
Antworten
Beitrag von Claus (4645 Beiträge) am Mittwoch, 2.Dezember.2009, 13:29.
Re: Re: Re: Re: Re: Re: Re: Re: Re: Löschen ältester Datensätze
Naja, Dein Pseudonym spricht doch für sich...;)
Antworten
Beitrag von Sander (8133 Beiträge) am Samstag, 21.November.2009, 12:40.
Re: Re: Löschen ältester Datensätze
Antworten
Beitrag von Claus (4645 Beiträge) am Samstag, 21.November.2009, 12:46.
Re: Löschen ältester Datensätze
Eventuell reicht es schon, diesen perlcode vor das do=action zu setzen:
<perl>
if ($cmd eq "add")
{
get "Id=* range=0,1", "Datenbank";
if ($_amount_query >9998)
{
del"Id==$Id","Datenbank";
}
}
</perl>
<do action=all usw....>
auf diese Weise wird bei Hinzufügen eines neuen Datensatzes und bereits vorhandenen 9999 DS der Datensatz mit der niedriegsten Id gelöscht.
Du solltest es aber erst einmal mit einer Kopie der DB probieren, ob es wie gewünscht funktioniert...;)
hth
Gruesse
Claus
Antworten
Beitrag von Sander (8133 Beiträge) am Samstag, 21.November.2009, 14:45.
Re: Re: Löschen ältester Datensätze
Id==*
wobei da vielleicht die if-abfrage schon zuviel ist. im günstigsten fall (nach dem ersten mal) holt der bei mir auch nur ein DS und löscht nur den einen. aber ich hab auch ein sort drin, was ja auch nicht von vorteil ist - hmm... ;)
Antworten
Beitrag von Claus (4645 Beiträge) am Samstag, 21.November.2009, 16:23.
Re: Re: Re: Löschen ältester Datensätze
Upps, ein "=" beim Tippen wieder von der Tastatur gefressen...;)
Man kann natürlich auch nur diesen Code generell so vor das "<do action=all" einbauen, aber dann wird das ständig überprüft, was eigentlich auch nicht so prickelnd ist:
<perl>
get "Id=* range=0,1", "Datenbank";
if ($_amount_query >9998)
{
del"Id==$Id","Datenbank";
}
</perl>
<do action=all usw...>
Bei dem vorherigen Code wird nur bei jeder Neueingabe geprüft.
Ist die Frage, was sinnvoller ist. Da hat er nun die Qual der Wahl, aber leber mehrere Lösungsmöglichkeiten als keine...;)
Gruesse
Claus
Antworten
Beitrag von Claus (4645 Beiträge) am Samstag, 21.November.2009, 19:16. WWW: hummelexpress.de
Re: Re: Re: Re: Löschen ältester Datensätze
Beim kopieren natürlich fröhlich den Tippfehler mit übernommen...
<perl>
get "Id==* range=0,1", "Datenbank";
if ($_amount_query >9998)
{
del"Id==$Id","Datenbank";
}
</perl>
<do action=all usw...>
jetzt ist richtig
Gruesse
Claus
Antworten
Beitrag von Sander (8133 Beiträge) am Samstag, 21.November.2009, 22:07.
Re: Re: Re: Re: Re: Löschen ältester Datensätze
Antworten
Beitrag von Helmut Meisl (119 Beiträge) am Samstag, 21.November.2009, 23:43.
Re: Re: Re: Re: Re: Re: Löschen ältester Datensätze
VIELEN DANK an alle Helfer! Ich habe den Code mal eingebaut und werde testen, ob alles wie gewünscht funktioniert.
Antworten
Beitrag von Claus (4645 Beiträge) am Montag, 23.November.2009, 12:42.
Re: Re: Re: Re: Re: Re: Löschen ältester Datensätze
stimmt, aber das wird da wohl, ebenso wie bei Beispiel2 von mir, permanent durchgeführt, während mein 1. Beispielcode nur beim Hinzufügen aufgerufen wird und keine Sortierung benötigt...;)
Muß er halt mal alles probieren und sich dann die runtime anschauen
Gruesse
Claus
Antworten
Beitrag von Sander (8133 Beiträge) am Montag, 23.November.2009, 13:35.
Re: Re: Re: Re: Re: Re: Re: Löschen ältester Datensätze
Antworten
Beitrag von Helmut Meisl (119 Beiträge) am Montag, 23.November.2009, 20:10.
Re: Re: Re: Re: Re: Re: Re: Re: Löschen ältester Datensätze
Antworten
Beitrag von Claus (4645 Beiträge) am Dienstag, 24.November.2009, 09:15.
Re: Re: Re: Re: Re: Re: Re: Re: Re: Löschen ältester Datensätze
Hallo Helmut,
>sondern habe einfach mal SO kurz vor 10000 Datensätzen das Template aktiviert,
Du hattest etwas von max. 9999 Datensätzen geschrieben...
>Die Abfrage der Datensatzanzahl hat bei mir nicht funktioniert.
Wenn Du nur 9995 DS hast, wird es nicht aktiv, sondern erst wenn die vorhandene Anzahl der Datensätze > 9998 ist, also wenn 9999 DS in der Datenbank vorhanden sind, wird der älteste DS gelöscht.
Du kannst Die Anzahl der momentan vorhandenen DS ja mal mit einer Test-DB (Kopie) prüfen
<perl>
if ($cmd eq "add")
{
get "Id==* range=0,1", "Datenbank";
out "Anzahl der Einträge: $_amount_query<br>"; # die Zeile später entfernen
if ($_amount_query >9998)
{
del"Id==$Id","Datenbank";
}
}
</perl>
Gruesse
Claus
Antworten