Witam serdecznie.
Mam tabelę REKORDY, w której znajdują się zbiorczo rekordy z wielu serii.
CREATE TABLE IF NOT EXISTS `rekordy` (
`rekord_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`rekord_seria` int(10) unsigned DEFAULT NULL,
`rekord_wartosc` tinyint(3) unsigned DEFAULT NULL,
`rekord_data` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`rekord_id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1195 ;
Każdy rekord ma unikalne id: rekord_id
Każda seria rekordów ma swój unikalny nr: rekord_seria
Każdy rekord ma jakąś daną w polu: rekord_wartosc
Każdy rekord ma timestamp dodania do bazy: rekord_data
Rekordy z poszczególnych serii dodawane są do bazy bardzo różnych odstępach czasu i w różnych ilościach.
Chcę za pomocą krona czyścić tę tabelę na dwa sposoby jednocześnie:
- kasować starsze rekordy niż doba niezależnie, do której serii należą (to już zaimplementowałem),
- pozostawiać w tej tabeli dla każdej serii nie więcej niż 200 najnowszych rekordów w danej serii. To kasowanie kron będzie wykonywał co 5 minut.
Pytanie więc dotyczy punktu 2. Chcę to wykonać tylko i wyłącznie za pomocą MySQL, bez używania do tego odczytywania rekordów do tablicy PHP i później w pętli usuwania ich rekord po rekordzie.
Kombinuję z wykorzystaniem NOT IN, czyli coś w stylu:
DELETE FROM
rekordy
WHERE
rekord_id NOT IN
(
SELECT
rekord_id,
FROM
rekordy
ORDER BY
`rekord_data` DESC
LIMIT 200
)
ale do tego trzeba jeszcze to grupować po numerze serii: rekord_seria
Jak to dobrze napisać, by osiągnąć cel?
Mam nadzieję, że wystarczająco dokładnie i zrozumiale opisałem mój problem.