Zmniejszanie ilości rekordów do 1000

0

Witam
Chciałbym napisać w php funkcję która zmniejszy mi ilość rekordów w podanej tabeli do powiedzmy 1000, tzn chodzi o to aby tabela była zmniejszana do 1000 rekordów jeśli jest w niej ponad 1000. Nie wiem jak skonstruować takie zapytanie. Chodzi o to aby jeśli w tabeli mamy 1200 rekordów to 200 najstarszych trzeba usunąć. A najnowsze 1000 zostawić. Z tym że po id się nie da bo mogą być nie po kolei czyli 1,4,5,6,33.

Z góry dziękuje za wszelką pomoc

1

Musisz mieć jakąś datę po której chcesz sortować. Robisz to przez:

 ORDER BY MODIFICATION_DATE

i dodatkowo w mysql masz ułatwienie do limitu

LIMIT 1000

PS. te liczby są po kolei :).

1

A ile na raz wstawiasz?
Co się stanie, gdy zechcesz wstawić na raz 2000 rekordów? Łamie to twoje zasady...
Ale generalnie reguła w takim postępowaniu jest taka, że raz na jakiś czas (np. dziennie) uruchamiasz skrypt/job/zapytanie, które usunie ci starocie (przeniesie do archiwum). Da się tak zrobić tylko z tabelami, które nie są powiązane z innymi, albo mają "kaskadę". Oczywiście rozwala to sens i spójność takiej bazy, ale to zupełnie inna bajka.
A ostatnie tysiąc rekordów znajdziesz tak:

SELECT id FROM tabela ORDER BY id DESC LIMIT 1000

więc usunięcie wszystkiego, co nie jest w tym tysiącu to:

DELETE FROM tabela WHERE id NOT IN (SELECT id FROM tabela WHERE id IS NOT NULL ORDER BY id DESC LIMIT 100)
0

No tak funkcja będzie wywoływana raz na jakiś czas tylko a rekordy beda dodawane pojedynczo nie zdarzy się 2000 na raz.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.