Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
[MySQL 4.1] alle datensätzen löschen bis auf die 1000 neusten [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
[MySQL 4.1] alle datensätzen löschen bis auf die 1000 neusten


 
rEd1Z1_2K
28-08-2007, 00:03 
 
heyho,

in wie weit ist es möglich und wenn ja wie, das man aus einer tabelle alle alten datensätze löschen läst, bis auf die 1000 neuesten?

jemand ne idee?

 
penizillin
28-08-2007, 00:04 
 
definiere "alter datensatz".

 
rEd1Z1_2K
28-08-2007, 00:06 
 
naja mal angenommen ich hab ne tabelle mit ca 3000 datensätzen, einmal am tag möchte ich diese jetzt aufräumen so das nur die neusten 1000 übrig bleiben. (ID hat auto_increment) die anzahl der sich in der tabelle befindlichen datensätze varriert aber stark.

momentan lös ich das noch das pro neuer eintrag ein alter gelöscht wird, ist mir aber zu umständlich da ich nur einmal täglich dort aufräumen möchte.

 
ghostgambler
28-08-2007, 00:14 
 
DELETE FROM tabelle WHERE id NOT IN (SELECT id FROM tabelle ORDER BY Datum DESC LIMIT 1000)

Ich glaub NOT IN ist aber nicht sonderlich performant ... müsste man mal ausprobieren, ansonsten eventuell mit php-Füller ein
LOCK TABLE tabelle
SELECT GROUP_CONCAT(id SEPARATOR ',') ids FROM tabelle ORDER BY Datum DESC LIMIT 1000;
DELETE FROM tabelle WHERE id NOT IN ($row['ids']);
UNLOCK TABLE tabelle
(ist nur pseudo-Code~)

 
ghostgambler
28-08-2007, 00:16 
 
oder auch unsauber ein
DELETE FROM tabelle ORDER BY Datum DESC LIMIT 1000, 99999999
*zucks*

 
penizillin
28-08-2007, 00:21 
 
die tägliche löschung bildet wohl in deinem fall keine zeitkritische angelegenheit, so kannst du etwas von ghostgambler vorschlägen nehmen, oder sogar die id des tausendsten eintrags ermitteln und alle ids größer dieser löschen (beachte die atomarität).

 
mnhg
28-08-2007, 20:05 
 
So wie es sich anhört ist deine 1000 nur ein willkürlicher Wert. Und wenn dein Autoincrement wenig Lücken beim Löschen aufweißt, kannst du ja auch alle ID < MAX-1000 löschen. Damit wäre das Löschen natürlich recht zügig.


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:59 Uhr.