Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Код

#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'


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
Код

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your 
MySQL server version for the right syntax to use near 't1 where 30 <=  (select count(*) from table t2 where t2.id > t1.id)' at line 1

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 -- это только разговоры (как был непонятно как сляпанной недореляцыонкой, так и остался).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)