Мы используем cookie-файлы
Для оптимизации работы нашего сайта мы используем cookie-файлы. Продолжая использовать сайт, Вы соглашаетесь с использованием cookie-файлов.
Панель управления
  • Русский
  • Українська
  • UAH
  • USD
  • RUB
  • EUR
  • 0-800-307-307  Горячая линия
  • +38(044) 392-74-33  Киев
  • +38(057) 728-39-00  Харьков
  • +38(056) 794-38-31  Днепр
  • +38(032) 229-58-93  Львов
  • +38(048) 738-57-70  Одесса
  • +38(093) 170-15-42  Life
  • +38(067) 400-88-44  Киевстар
  • +1(888)393-24-51  USA, Toll free
  • +44(131)507-01-14  Great Britain
  • +7(499) 348-28-61  Москва

MySQL. Удалить все записи из таблицы оставив только N последних


Rock-N-Roll
8 лет
0
Удалить все записи из таблицы оставив только N последних

Здравствуйте. Интересует такой вопрос.
Как можно удалить все записи из таблицы оставив только N последних. Допустим - изначально в таблице 1000 записей, нужно оставить последние 100. Далее - сколько бы записей не добавлялось, а общее количество записей должна быть величина постоянная, которая легко изменяется в любой момент. Такая себе авточистка таблицы после добавления очередной записи. В таблице есть auto_increment по id (но возможны и пропуски, в случае ручного удаления некоторых записей).
В интернете нашел такое решение:
$count = "100";
$q = mysql_query("SELECT @max := MAX(`id`)-($count-1) FROM `$table`");
$q = mysql_query("DELETE FROM `$table` WHERE `id` < @max");
Работает отлично и так как мне нужно, но смущает "мудренность" этих запросов. Может как-то можно (или нужно) записать попроще и без этих вот ":=" и "@" (естественно не теряя при этом по скорости)? Не будет ли с этим проблем с повышением версии MySQL? Или оставить так?
Заранее благодарен.

rudenko
8 лет
0

Ваш вариант работать не будет, так как согласно задаче могут быть пропуски в id, поэтому я бы использовал такой алгоритм:
$total = select count(*) from table_name;
delete from table_name order by id asc limit $total - 100;

Rock-N-Roll
8 лет
0

Таки да, упустил момент. При удаленных записях (фрагментированный id) общее количество записей вроде как равно $кол-во_постов = $заданное_кол-во_постов - $кол-во_удаленных_постов. А нужно $кол-во_постов = $заданное_кол-во_постов :) Работает только при непрерывном id. Спасибо.

Участвовать в общении на этом форуме могут только зарегистрированные пользователи.