savostin
@savostin
Еще один программист

Как оставить в таблице не больше N последних записей определенного типа?

Подскажите пожалуйста, как малой кровью при вставке строки в таблицу оставить в ней не более N записей такого же "типа" (значение поля).
Например,
ID | type | time | other
1 | 1 | 2020-01-01 | Bla-bla-bla
2 | 1 | 2020-01-02 | Bla-bla-bla
3 | 2 | 2020-01-02 | Bla-bla-bla
4 | 1 | 2020-01-03 | Bla-bla-bla

При N = 3 и вставке записи
5 | 1 | 2020-01-06 | Bla-bla-bla
запись
1 | 1 | 2020-01-01 | Bla-bla-bla
должна удалиться.

При вставке записи
6 | 2 | 2020-01-07 | Bla-bla-bla
ничего не удаляется, т.к. записей с type = 2 только 2.

При вставке записи
7 | 1 | 2020-01-07 | Bla-bla-bla
запись
2 | 1 | 2020-01-02 | Bla-bla-bla
должна удалиться и т.д.

Триггером по понятным причинам сделать нельзя. Советуют делать Mysql event, но при большом "трафике" вставок будут моменты, когда записей больше N. Выносить эту проверку в приложение (т.е. после insert делать select и затем delete, всё это в транзакции) не хочется, но чувствую, что придется.

И попутный вопрос, MySQL же не умеет delete from ... where ..order by .... limit OFFSET ? Как удалить одним запросом?
  • Вопрос задан
  • 39 просмотров
Пригласить эксперта
Ответы на вопрос 1
BorLaze
@BorLaze
Java developer
И попутный вопрос, MySQL же не умеет delete from ... where ..order by .... limit OFFSET ? Как удалить одним запросом?

а что мешает сделать подзапрос?

delete from ...
where id in (select id from ... where ... order by ... limit ...)


а уже в скобках - любой сложности условия
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы