Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > MySQL > Как удалить все старые записи, оставив только 30 ? |
Автор: admsasha 6.2.2012, 12:26 |
Есть таблица (id,date,message) с 100 записями. Нужно оставить только последнии 30. Как удалить все старые записи, оставив только 30 ? |
Автор: tzirechnoy 6.2.2012, 12:44 |
DELETE * FROM ... WHERE id NOT IN (SELECT id FROM ... ORDER BY date DESC LIMIT 30); |
Автор: admsasha 6.2.2012, 12:48 | ||
MySQL 5.1.40 |
Автор: Zloxa 6.2.2012, 12:53 |
delete from table t1 where 30 <= (select count(*) from table t2 where t2.id > t1.id) |
Автор: admsasha 6.2.2012, 13:14 | ||
table, естественно, поменял на свою таблицу. |
Автор: Akina 6.2.2012, 13:31 |
admsasha, попробуй вариант tzirechnoy, но оформи подзапрос как View. |
Автор: admsasha 6.2.2012, 13:45 |
Akina, так же пишет, что не поддерживается версией. |
Автор: Akina 6.2.2012, 13:48 |
В таком разе сделайте через статическую темп-таблицу. |
Автор: tzirechnoy 7.2.2012, 13:11 |
В MySQL, кажэтся, есть какая-то затычка, похожая на оракловский rownum. Что-то вроде SELECT @rownum:=@rownum+1 AS rnum, table.* FROM (SELECT @rownum:=0) r, table. Если в WHERE не даст использовать ни rnum, ни @rownum -- можно оформить это вложэнным запросом, а у жэ в невложэнном поставить WHERE rnum < 30. PS Ну и, лично для меня -- ещё одна галочка, что мыскль использовать не следует, а все разговоры, что он сильно продвинулся с 3.23 -- это только разговоры (как был непонятно как сляпанной недореляцыонкой, так и остался). |