• UAH
  • USD
  • RUB
  • EUR
  • +38(044) 392-74-33  Киев
  • +38(057) 728-39-00  Харьков
  • +38(056) 794-38-31  Днепропетровск
  • +38(062) 210-24-93  Донецк
  • +38(032) 229-58-93  Львов
  • +38(048) 738-57-70  Одесса
  • +38(093) 449-04-21  Life
  • +38(067) 400-88-44  Киевстар
  • +38(095) 007-72-35  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
06.11.2012 18:06
хостинг: есть
домен: есть
Удалить все записи из таблицы оставив только 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? Или оставить так?

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

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

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

Тема закрыта по истечению срока давности.
Горячая линия
(044)
392 74 33
другие города