SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 27.07.2013 15:02:41

BelOFF
Участник
Зарегистрирован: 29.10.2012
Сообщений: 11

DELETE + ORDER BY + LIMIT

Добрый день. Подскажите пожалуйста, можно ли написать простой запрос на удаление из БД старых записей?
Есть таблица в которой мне нужно максимум  250 последних  полей все остальное - это не нужный хлам, хочется очищать этот хлам.
Пытаюсь выполнить запрос:


DELETE FROM items ORDER BY id DESC LIMIT 100, 250;
 

Выдает  ошибку... Что не правильно в этом запросе, может при DELETE нельзя использовать OFFSET?
Вроде простой запрос и понятный но выполнятся не хочет? Неужели без SELECT'a не обойтись?

Неактивен

 

#2 27.07.2013 15:40:12

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: DELETE + ORDER BY + LIMIT

BelOFF написал:

Выдает  ошибку... Что не правильно в этом запросе, может при DELETE нельзя использовать OFFSET?

Да

Неактивен

 

#3 27.07.2013 15:46:30

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: DELETE + ORDER BY + LIMIT

И кстати, ваш запрос (если бы работал), то удалил бы записи со 101 по 350, считая по id в порядке убывания.

Для решения вашей задачи нужно селектом определить id 250-ой записи с конца и удалить по условию id<полученный_номер

Неактивен

 

#4 27.07.2013 16:11:49

BelOFF
Участник
Зарегистрирован: 29.10.2012
Сообщений: 11

Re: DELETE + ORDER BY + LIMIT

vasya написал:

И кстати, ваш запрос (если бы работал), то удалил бы записи со 101 по 350, считая по id в порядке убывания.

Для решения вашей задачи нужно селектом определить id 250-ой записи с конца и удалить по условию id<полученный_номер

Спасибо... буду знать про OFFSET при DELETE... Просто хотелось как-то без лишних селектов....  спасибо за наводку...

Отредактированно BelOFF (27.07.2013 16:14:10)

Неактивен

 

#5 27.07.2013 17:00:53

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: DELETE + ORDER BY + LIMIT

Можно конечно и одним запросом, но там селектов на самом деле будет больше.

delete from `таблица` where id in(select id from (SELECT s.id, @i:=@i+1 i FROM `таблица` s, (select @i:=0) x order by id desc) t where i>250);


С точки зрения производительности лучше два простых запроса, чем таким образом. Это только из любви к искусству можно писать такое, и только на форуме smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson