Здравствуйте. Нужно удалить записи в таблице, но чтобы осталось не меньше определенного кол-ва записей (к примеру, чтобы осталось не менее 500). На ум приходит рекурсивная функция, которая будет каждый раз считать кол-во строк в таблице, и если больше ограничительного числа - то делать удаление. А можно как-то сделать одним запросом? Спасибо.
Re: Удалять записи, пока не останется определенное кол-во за Не пробовал может бред, но все же Delete поддерживает ORDER и LIMIT. Сделай OREDER в нужном направлении и затем LIMIT 500 Добавлено спустя 19 секунд: Re: Удалять записи, пока не останется определенное кол-во записе Получится 1 запрос
Re: Удалять записи, пока не останется определенное кол-во за Это не то. LIMIT просто удалит определенное кол-во, не считаясь с кол-вом, которое осталось. ORDER не не поможет.
Re: Удалять записи, пока не останется определенное кол-во за Ну это уже мои рассуждения... Можно попробовать первым запросом получить общее количество строк.Отнять 500 т.е. узнать сколько строк удалять. Затем как я описал выше order и limit удалит не нужные строки.Останется 500. Что б одним запросом, тут я думаю процедуру сделать надо... Может кто то лучше посоветует...
Re: Удалять записи, пока не останется определенное кол-во за Стало интересно написал процедуру Код (Text): DELIMITER // CREATE PROCEDURE delete_records(IN records INT) BEGIN DECLARE total_records INT; SELECT COUNT(*) - records INTO total_records FROM table_name; IF total_records > 0 THEN DELETE FROM table_name ORDER BY id ASC LIMIT total_records; END IF; END; В процедуру передается количество записей которое должно остаться в базе, дальше думаю разберешь
Re: Удалять записи, пока не останется определенное кол-во за Точно, первым запросом буду считать кол-во строк и вычитать, полученное число вставлять в LIMIT в запрос удаления. Спасибо)
Re: Удалять записи, пока не останется определенное кол-во за хз, я б выбрал 500 айдишников, а остальные удалил бы запросом с условием where id not in (айдишники через запятую)
Re: Удалять записи, пока не останется определенное кол-во за Till483 если не сложно проверь оба варианта, интересно что быстрее
Re: Удалять записи, пока не останется определенное кол-во за DELETE ... NOT IN (список чего оставить) приходит в голову буквально такое, но оно невозможно в силу ограничений MySQL, limit и in несовместимы! Код (Text): DELETE FROM xxx WHERE `id` NOT IN ( SELECT `id` FROM `xxx` WHERE условие_чего_оставить ORDER BY `z` LIMIT 500) Error: #1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' зато разрешено обернуть внутренний подзапрос в еще один select и тогда сработает! )) Код (Text): DELETE FROM `xxx` WHERE `id` NOT IN ( SELECT `id` FROM ( SELECT `id` FROM `xxx` WHERE условие_чего_оставить ORDER BY `z` LIMIT 500 ) AS t) проверено! кстати не я это придумал
Re: Удалять записи, пока не останется определенное кол-во за Жалко что Till483 молчит а то самому как то лень проверять...
Re: Удалять записи, пока не останется определенное кол-во за спасибо добрый человек. только вот понадобилось удалить из таблицы данные с подзапросом из этой же таблицы. и вспомнил, что на днях читал о такой проблеме)