PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [SQL] Jeder 11 Datenbankeintrag löschen.



cr00sy
18.04.2011, 15:44
Hallo,

da ich meine User Manuell auszahle gibt es eine Statistik für die User wann wie viel ausgezahlt wurde, diese habe ich per DESC LIMIT auf 10 Einträge gesetzt. Nun ist ja eigentlich alles was über 10 Einträge ist Datenmüll und diesen möchte ich gerne entfernen. Gibt es eine Möglichkeit das sobald bei jemanden mehr wie 10 Einträge in der Statistik sind die älteste Auszahlung gelöscht wird?

Benutzt wird das LKT-Auszahlungsaddon. Wenn jemand Ideen hat wie man es verwirklichen könnte würde ich mich sehr freuen.

Lieben Gruß.

rene_1992
18.04.2011, 15:51
Hallo,

da ich meine User Manuell auszahle gibt es eine Statistik für die User wann wie viel ausgezahlt wurde, diese habe ich per DESC LIMIT auf 10 Einträge gesetzt. Nun ist ja eigentlich alles was über 10 Einträge ist Datenmüll und diesen möchte ich gerne entfernen. Gibt es eine Möglichkeit das sobald bei jemanden mehr wie 10 Einträge in der Statistik sind die älteste Auszahlung gelöscht wird?

Benutzt wird das LKT-Auszahlungsaddon. Wenn jemand Ideen hat wie man es verwirklichen könnte würde ich mich sehr freuen.

Lieben Gruß.


Frag mal bei LKT nach vielleicht weis er da was, und kann es ins Addon intigrieren ;)

Mfg Rene_1992 - René Röbel

hankfromhelvete
18.04.2011, 15:52
Das einfachste wird wohl sein, alle Auszahlungen die älter als x sind zu löschen. Ich kenn zwar zwar nicht die Struktur des Addons, aber wenn der Timestamp in der DB gespeichert wird, sollte das kein Problem sein.

Sent from my LT15i using Tapatalk

Lokutos
18.04.2011, 18:33
ich glaube da hast du dir ganz schön was vorgenommen;

also zuerstmal brauchst du ja eine id als primary_key, damit du jeden eintrag einzelnd anwählen kannst
-> standart 0 (null als zahl)

dann brauchst du m.e. eine 2. tabelle, in der du einfach speicherst, welcher eintrag als letztes überschrieben wurde.

dann kannst du mit count() die anzahl der einträge eines user herausfinden
wenn diese gleich 80 ist, wird kein neuer datensatz angelegt, sondern derjenige mit der ID+1 (aus der hilfstabelle) wird überschrieben

einziges problem bei der sache:
herausfinden, welche id als letztes überschrieben wurde und welche id als nächstes folgt
da muss man vll nochmal überlegen, bin ich aber im mom zu fertich für (grade informatik arbeit hinter mir und totall müde ^^)

hoffe das konnte dir erstmal helfen
mfg

EDIT:
is mir grade als idee gekommen:
du kannst ja ne einfache abfrage machen (welche id als nächstes kommt)

SELECT ID
FROM anzahl
WHERE user = "username"
AND ID > (SELECT ID FROM next_id WHERE user = "username")
ORDER BY ID ASC
LIMIT 1;

so in etwa, musst du halt anpassen ^^

Lokutos
18.04.2011, 19:11
ev. geht dieser query:

allerdings habe ich keine ahnung / Zeit zu googeln ob Group by in delete Statements erlaubt sind

Fürs auszahlen Pro

DELETE FROM vms_lkt_auszahlanforderungen Group by uid ORDER BY id DESC LIMIT 10, 100000

Für euroauszahlung

DELETE FROM vms_lkt_euroauszahlunganforderung Group by uid ORDER BY id DESC LIMIT 10, 100000


Bitte unbedingt zuerst ein Backup machen vor dem ausfüren zum test in der DB

cr00sy
21.06.2011, 21:21
Hey,

habe nun eine lösung:



$abc = "select * from vms_LKT_auszahlanforderungen order by uid asc";
$erc = mysql_query($abc);
while($row = mysql_fetch_object($erc))
{
if($aktuelle_uid!=$row->uid)
{
$aktuelle_uid=$row->uid;
$anzahl=0;
}
$anzahl++;
if($anzahl>10)
{
mysql_query("delete from vms_LKT_auszahlanforderungen where id=$row->id");
}
}
Das lasse ich nun mit dem Db_Optimize-Cron laufen.