Акция!  Домен 34 грн, домен 55 грн, домен  - 200 грн домен  - 65 грн, домен  - 99 грн, домен  - 56 грн!, домен  - 425 грн!
Мы используем cookie-файлы
Для оптимизации работы нашего сайта мы используем cookie-файлы. Продолжая использовать сайт, Вы соглашаетесь с использованием cookie-файлов.
  • RUB
  • USD
  • EUR
  • UAH
Чат техподдержки
Вы являетесь клиентом?
  • +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  Киевстар
  • +38(095) 630-90-82  MTC
  • +1(888)393-24-51  USA, Toll free
  • +44(131)507-01-14  Great Britain
  • +7(499) 348-28-61  Москва

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

Форумы MySQL Удалить все записи из таблицы оставив только N последних
Rock-N-Roll
6 лет
хостинг: есть
домен: есть
Удалить все записи из таблицы оставив только 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? Или оставить так?

Заранее благодарен.
Илья
6 лет
хостинг: есть
домен: есть
Ваш вариант работать не будет, так как согласно задаче могут быть пропуски в id, поэтому я бы использовал такой алгоритм:

$total = select count(*) from table_name;
delete from table_name order by id asc limit $total - 100;
Rock-N-Roll
6 лет
хостинг: есть
домен: есть
Таки да, упустил момент. При удаленных записях (фрагментированный id) общее количество записей вроде как равно $кол-во_постов = $заданное_кол-во_постов - $кол-во_удаленных_постов. А нужно $кол-во_постов = $заданное_кол-во_постов :) Работает только при непрерывном id. Спасибо.
Участвовать в общении на этом форуме могут только
зарегистрированные пользователи.

Если вы уже зарегистрированы Вам необходимо войти на форум.

Тема закрыта по истечению срока давности.