14. april 2015 - 09:54Der er
9 kommentarer og 1 løsning
Slet alle poster, bortset fra de 10000 nyeste
Hejsa. Jeg har et script, hvor jeg i en tabel gemmer nogle måleraflæsninger hvert 15 min. Da det kun er interessant, at se de seneste 10000 aflæsninger, vil jeg gerne i mit script lave det sådan, at der hele tiden vises de 10000 seneste.
Jeg har læst mig frem til nedenstående kode, men den sletter alle poster, bortset fra de sidste 20. Jeg har auto_increment på feltet `id`
$sql = "DELETE FROM `varmestatus` WHERE id NOT IN ( SELECT id FROM ( SELECT id FROM `varmestatus` ORDER BY id DESC LIMIT 10000 ) foo )";
#1 Nej det gør jeg ikke, idet der kun er 20 poster. Hver 15. minut gemmes ny post, men så køres Delete-scriptet efterfølgende.
Jeg troede, at den først vil "delete", når tabeller kommer op over 10000 poster.
Tak for dit forslag til kode. Men jeg kan ikke forstå, hvis det skal virke.
Lige nu ligger der 20 poster, og hvor seneste post har id nr. 536. Vil det virke med max(id)- 10000?
Løsningen skal gerne være, at der ikke slettes noget, så længe der er under 10.000 poster, og derefter beholdes de 10.000 nyeste (læs: højeste id-numre).
mysql> mysql> SELECT * FROM deldemo; +----+ | id | +----+ | 1 | | 3 | | 5 | | 7 | | 9 | +----+ 5 rows in set (0.00 sec)
mysql> mysql> DELETE FROM deldemo -> WHERE id NOT IN (SELECT * FROM (SELECT id FROM deldemo ORDER BY id DESC LIMIT 3) x); Query OK, 2 rows affected (0.01 sec)
mysql> mysql> SELECT * FROM deldemo; +----+ | id | +----+ | 5 | | 7 | | 9 | +----+ 3 rows in set (0.00 sec)
mysql> mysql> DELETE FROM deldemo -> WHERE id NOT IN (SELECT * FROM (SELECT id FROM deldemo ORDER BY id DESC LIMIT 3) x); Query OK, 0 rows affected (0.00 sec)
mysql> mysql> SELECT * FROM deldemo; +----+ | id | +----+ | 5 | | 7 | | 9 | +----+ 3 rows in set (0.00 sec)
mysql>
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.